对象地址问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 03:30:32
基类对象的地址不能直接赋值给指向共有派生类对象的指针

我记得可以啊,只是在使用virtual和不使用的时候有区别,为什么说不能呢?请讲一下,谢谢~

是这样的,我用反证法给你说明一下:
子类是在基类的基础上派生的,
在派生的过程中,
我们或许把一些虚函数实体化了,
或许我们在子类中添加了一些成员变量或者成员喊数,
并且基类的成员(包括成员变量和成员函数)一定是子类的子集,
所以,
当我们把基类的指针赋给子类(派生类)时,
即这个派生类的指针就指向了一个基类的实体,
当我们在利用这个派生类的指针调用一个派生类的成员函数或者成员变量时,
它所指向的基累实体里并没有该成员函数或成员变量,
就使调用不成功,
所以,基类的指针是不能赋给子类的.
同样的道理可以说明子类的指针为什么可以赋给基类的指针,
因为基类指针所能访问到的成员内容始终在子类成员内容范围内.

你一定是记反了。按你所说的方法进行指针赋值后,派生类指针将会指向基类对象。按照类继承的思想,基类往往并不实现具体的功能,或者说并没有实际意义,它的具体内容将由派生类定义,而它只是提供一个继承的接口。这样,指向派生类的指针本来是要操作派生类的函数或者变量的,但现在却指向基类,希望调用这个抽象的无实际意义的类中的内容,这显然是不符合实际情况的,也是不符合面向对象思想的。
这种操作很危险,且不符合实际情况,不提倡使用。但是语法上应该是可以通过的。正确的做法是“向上赋值”,即用基类指针指向派生类对象,以实现静态联编和动态联编(多态)。