我以前从未见过这种代码:
(B类是A类的子类)
ClassB objB;
ClassA *ptrA = &objB; // Question1
ClassA objA = *ptrA // Question2
问题1:
为什么这个赋值是有效的?
和
相比有什么区别Class B objB;
Class A *ptrA;
ptrA = (ClassA*)&objB;
或
ClassB *ptrA;
ptrA = new classB;
问题2:
这一行也是有效的。虽然这个概念看起来与之前的非常相似,但我不知道它是如何工作的。
谁能告诉我为什么这些分配有效?
最佳答案
在 C++ 中,基类指针可以指向派生类的对象。此语言规则使这些语句在 C++ 中有效。
首先,这是允许的,因为这不会产生任何问题,因为使用基类指针访问对象不会访问任何未定义的内存或函数。因为在基类中定义的任何东西也在子类/派生类中定义。
此功能允许动态多态
。其中派生类可以实现不同的功能,单个基类指针将调用派生类对象的函数,并且将根据基类指针指向的对象的类型调用函数。如果不允许基指针指向派生类对象和调用函数,则无法实现此功能。
关于c++ - 无需强制转换即可分配具有不同数据类型地址的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22683134/