我有一个A类:
class A
{
public:
virtual double getValue() = 0;
}
还有B类:
class B : public A
{
public:
virtual double getValue() { return 0.0; }
}
然后在 main() 中我这样做:
A * var;
var = new B[100];
std::cout << var[0].getValue(); //This works fine
std::cout << var[1].getValue(); //This, or any other index besides 0, causes the program to quit
如果我这样做:
B * var;
var = new B[100];
std::cout << var[0].getValue(); //This works fine
std::cout << var[1].getValue(); //Everything else works fine too
一切都编译得很好,但似乎我的多态性有问题?我很困惑。
你不能多态地处理数组,所以虽然new B[100]
创建一个数组B
对象并返回一个指向数组的指针 - 或者等效地返回数组的第一个元素 - 虽然将此指针分配给指向基类的指针是有效的,但将此视为指向数组的指针是无效的A
对象。
不能的主要原因是(通常)派生对象的大小与其基类不同,因此尝试将数组作为基类对象数组进行访问将不会使用正确的偏移量来获取指向下一个对象的指针派生类数组的下一个成员的基类子对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)