使用重载运算符打印动态对象数组<<在c ++中

时间:2016-01-18 16:29:18

标签: c++ arrays pointers polymorphism operator-overloading

我需要使用重载的<<来自动态数组中打印出一堆对象。操作

我已经超载了<<算子这样:

ostream& operator<<(ostream& os, Person* dt)
{
    return os << dt->getName();//getName returns a char*
}

现在这对常规指针工作得很好,但是只要我尝试做这样的事情:

    Person *p = new Person("Dany", 4);
    Object** obj=new Object*[sizeof(p)];
    obj[0] = p;
    cout << obj << endl;

我得到了毫无意义的价值。 请记住,Person类是抽象Object类的衍生物。

1 个答案:

答案 0 :(得分:0)

问题在于一个人是一个对象(根据你的说法,我们可以对它进行哲学思考,但确定),因此他可以访问对象的所有受保护和公共方法。但是一个对象不是一个人,因此它不知道如何使用亲自定义的方法(例如运算符)。

您可以直接将人转换为对象,就像您一样。但不是一个人的对象,就像你试图暗示的那样。

通常会使用虚函数来产生您正在寻找的行为,但正如您所说,这很棘手,因为运算符&lt;&lt;是一个朋友的功能,thous不能虚拟。幸运的是a nice technique to make << virtual不久前发布了。