【发布时间】:2016-01-18 16:29:17
【问题描述】:
我需要使用重载的
我以这种方式重载了
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 类的派生类。
【问题讨论】:
-
Object有一个getName()成员吗,你有一个operator<<用于Object*吗?如果没有,它只会打印指针值——一些内存地址,比如0x20a1937d。 -
您只重载了指向
Person的指针的输出运算符,而不是指向Object的指针的指针。 -
另外,
new Object*[sizeof(p)]是非常可疑的,不会做你认为的(我认为)。 -
为什么有这些指针,兄弟?
-
我得到一个毫无意义的值 --
sizeof(p)与sizeof(Person *)相同,或者基本上是指针的大小(通常为 4 或 8)。这是你想做的吗? -- 正则指针 -- 那么你认为不规则指针是什么?
标签: c++ arrays pointers polymorphism operator-overloading