可以解释为什么不能将基类指针赋给派生类指针吗?我知道这是不可能的,但我想知道原因。逻辑派生类包含基类。让我知道原因 提前致谢
答案 0 :(得分:1)
考虑:
struct A
{
};
struct B : A
{
int b;
};
struct c : A
{
char c;
};
C cobj;
A* aptr = &cobj;
B* bptr = aptr; // Assuming this were allowed...
bptr->b = 10;
通过这样做,你已经使用了超出有效内存的内存。您已经创建了一个大小为sizeof(C)
的对象,但是您不会将其视为大小为sizeof(B)
的对象。
答案 1 :(得分:0)
我认为你的问题是为什么不应该做以下事情: -
Derived *ptr = new Base; //assume for now public inheritance.
Derived
是Base
的专精,即Derived
会继承base
的所有功能,此外还可以添加一些自己的功能。这意味着分配Base to Derived ptr
会导致丢失这些功能,如果对该变量/方法进行调用,可能会导致未定义的行为。
答案 2 :(得分:0)
除了基类中的所有类之外,派生类还可以拥有自己的数据成员和成员函数。
如果将派生类指针指向与基类指针相同的东西,派生类指针会认为它指向派生类对象,即使它指向基类对象
如果尝试使用此派生类指针访问派生类数据成员或成员函数,它将无法工作,因为它指向不具备这些功能的基类对象。
例如,假设我有一个名为Person的基类和一个名为Programmer的派生类。我可以创建一个Person对象,并指向该对象。然后我可以尝试使Programmer指针也指向Person对象(通过设置它等于Person指针)。如果我使用我的程序员指针来尝试创建Person对象代码(相当于调用Programmer成员函数)或者只做程序员所做的事情,那么它就不会起作用,因为Person还没有被专门化。< / p>