基类指针无法分配给派生类指针的原因

时间:2014-12-09 05:12:49

标签: c++

可以解释为什么不能将基类指针赋给派生类指针吗?我知道这是不可能的,但我想知道原因。逻辑派生类包含基类。让我知道原因 提前致谢

3 个答案:

答案 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.

DerivedBase的专精,即Derived会继承base的所有功能,此外还可以添加一些自己的功能。这意味着分配Base to Derived ptr会导致丢失这些功能,如果对该变量/方法进行调用,可能会导致未定义的行为。

答案 2 :(得分:0)

除了基类中的所有类之外,派生类还可以拥有自己的数据成员和成员函数。

如果将派生类指针指向与基类指针相同的东西,派生类指针会认为它指向派生类对象,即使它指向基类对象

如果尝试使用此派生类指针访问派生类数据成员或成员函数,它将无法工作,因为它指向不具备这些功能的基类对象。

例如,假设我有一个名为Person的基类和一个名为Programmer的派生类。我可以创建一个Person对象,并指向该对象。然后我可以尝试使Programmer指针也指向Person对象(通过设置它等于Person指针)。如果我使用我的程序员指针来尝试创建Person对象代码(相当于调用Programmer成员函数)或者只做程序员所做的事情,那么它就不会起作用,因为Person还没有被专门化。< / p>