我需要使用重载的<<来自动态数组中打印出一堆对象。操作
我已经超载了<<算子这样:
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类的衍生物。
答案 0 :(得分:0)
问题在于一个人是一个对象(根据你的说法,我们可以对它进行哲学思考,但确定),因此他可以访问对象的所有受保护和公共方法。但是一个对象不是一个人,因此它不知道如何使用亲自定义的方法(例如运算符)。
您可以直接将人转换为对象,就像您一样。但不是一个人的对象,就像你试图暗示的那样。
通常会使用虚函数来产生您正在寻找的行为,但正如您所说,这很棘手,因为运算符&lt;&lt;是一个朋友的功能,thous不能虚拟。幸运的是a nice technique to make << virtual不久前发布了。