Polymorphism amp; Pointers to arrays(多态性与指向数组的指针)
问题描述
I have a class A:
class A
{
public:
virtual double getValue() = 0;
}
And a class B:
class B : public A
{
public:
virtual double getValue() { return 0.0; }
}
And then in main() I do:
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
If instead I do:
B * var;
var = new B[100];
std::cout << var[0].getValue(); //This works fine
std::cout << var[1].getValue(); //Everything else works fine too
Everything compiles fine, but it seems as though there is something wrong with my polymorphism perhaps? I'm puzzled.
You can't treat arrays polymorphically, so while new B[100]
creates an array of B
objects and returns a pointer to the array - or equivalently the first element of the array - and while it is valid to assign this pointer to a pointer to a base class, it is not valid to treat this as a pointer into an array of A
objects.
The principal reason that you can't is that (typically) derived objects are a different size to their base classes, so attempting to access the array as an array of base class objects will not use the correct offset to get a pointer to the next base class subobject of the next member of the derived class array.
这篇关于多态性与指向数组的指针的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:多态性与指向数组的指针


基础教程推荐
- 迭代std :: bitset中真实位的有效方法? 2022-10-18
- C语言3个整数的数组 1970-01-01
- 明确指定任何或所有枚举数的整数值 1970-01-01
- 用指数格式表示浮点数 1970-01-01
- C++:为什么结构类需要一个虚拟方法才能成为多态? 2022-10-19
- C语言数组 1970-01-01
- 向量<unique_ptr<A>>使用初始化列表 2022-10-23
- 对 STL 容器的安全并行只读访问 2022-10-25
- C++多态 1970-01-01
- 总计将在节日礼物上花多少钱 1970-01-01