2017-10-17 11 views
0

のすべてについてstd :: setw()は次の出力にのみ影響を与えます。ちょうどあなたのクラスに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

:テーブル出力のユーザー定義型の 全体オペレーター< <を整列させるための標準的なものを練習ので

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、私は要求に応じてクラスをフォーマットできるように答えを改善しました –

関連する問題