C ++输出对象中的所有成员

时间:2017-04-04 17:29:14

标签: c++ class oop object cout

到目前为止,我已经定义了一个简单的类......

class person {
public:
    string firstname;
    string lastname;
    string age;
    string pstcode;
};

...然后将一些成员和值添加到名为“bill”...

的对象中
int main() {
    person bill;
    bill.firstname = "Bill";
    bill.lastname = "Smith";
    bill.age = "24";
    bill.pstcode = "OX29 8DJ";
}

但是你怎么输出所有这些值呢?你会使用for循环迭代每个成员吗?

2 个答案:

答案 0 :(得分:0)

简单地说,您使用ostream输出每个元素:

class Person
{
public:
    void Print_As_CSV(std::ostream& output)
    {
       output << firstname << ",";
       output << lastname  << ",";
       output << age       << ",";
       output << pstcode   << "\n";
    }
    string firstname;
    string lastname;
    string age;
    string pstcode;
};

可能有不同的打印方法,这就是我没有超载operator <<的原因。例如,每行一个数据成员将是另一种流行的场景。

编辑1:为什么不循环?
class具有单独的字段,这就是您无法对成员进行迭代的原因。

如果要对成员进行迭代或循环,则必须为类创建迭代器或使用提供迭代的容器(如std::vector)。

答案 1 :(得分:0)

我通常会覆盖operator <<,因此我的对象与任何内置对象一样容易打印。

以下是覆盖operator <<的一种方式:

std::ostream& operator<<(std::ostream& os, const person& p)
{
    return os << "("
              << p.lastname << ", "
              << p.firstname << ": "
              << p.age << ", "
              << p.pstcode
              << ")";
}

然后使用它:

std::cout << "Meet my friend, " << bill << "\n";

这是一个使用这种技术的完整程序:

#include <iostream>
#include <string>

class person {
public:
    std::string firstname;
    std::string lastname;
    std::string age;
    std::string pstcode;
    friend std::ostream& operator<<(std::ostream& os, const person& p)
    {
        return os << "("
                  << p.lastname << ", "
                  << p.firstname << ": "
                  << p.age << ", "
                  << p.pstcode
                  << ")";
    }

};

int main() {
    person bill;
    bill.firstname = "Bill";
    bill.lastname = "Smith";
    bill.age = "24";
    bill.pstcode = "OX29 8DJ";

    std::cout << "Meet my friend, " << bill << "\n";
}