2017-10-17 144 views
0

我们知道,std :: setw()只影响下一个输出。std :: setw整个运算符<<用户自定义类型

所以,对准什么标准的做法整个操作< <表输出用户定义类型的:

class A 
{ 
    int i, j; 
public: 
    friend ostream& opeartor<<(ostream& out, const A& a) { 
      return << "Data: [" << i << ", " << j << "]"; 
    } 
} 

// ... 
A[] as; 
out << std::left; 
for (unsigned i = 0; i < n; ++i) 
    out << std::setw(4) << i 
     << std::setw(20) << as[i] // !!! 
     << std::setw(20) << some_strings[i] 
     << some_other_classes[i] << std::endl; 
out << std::right; 

回答

0

只需添加一个setw()方法类:

class A 
{ 
    int i, j; 
    mutable int width = -1; 

public: 
    A& setw(int n) { 
     this->width = n; 
     return *this; 
    } 

    friend ostream& operator<<(ostream& out, const A& a); 
}; 

而当你打印它时,如果你想对齐,只需使用它:

int main() { 
    A as[5]; 
    for (auto & a : as) 
     cout << a.setw(15) << endl; 
} 
+0

他们打算怎么样?或者他们应该开始为他们需要的每种格式修改这个'operator <<'?如果他们*需要不同的格式呢? – StoryTeller

+0

@StoryTeller,我改进了我的答案,以便它可以根据需求对班级进行格式化 –

相关问题