将基类指针赋给派生类的问题
来源:互联网 发布:淘宝店铺歌曲 编辑:程序博客网 时间:2024/06/03 18:07
将派生类地址赋给基类指针,也就是基类指针指派生类对象,也就是我们平时说的多态
但是反过来的时候,必须经过强制类型转换才可以编译通过,
下来直接代码:
#include<iostream>usingnamespacestd;class Base{public:virtual void print(){ cout<<"base"<<endl;}};class Derived:public Base{public:void print(){cout<<"derived"<<endl;}};int main(void){Base * pb=new Base();//定义基类指针Derived * pd=(Derived*)pb;//赋值给派生类指针pd->print();//调用基类的print输出basepd->Derived::print();//调用派生类的print输出derivedreturn 0;}
我想问问用pd->print()为什么调用的是基类的print
然后为什么将基类的virtual去掉之后,调用的便是派生类的print
------------------------------------------解答----------------------------------------------
调用哪个虚函数是由对象所指的虚函数表所决定的,当你 new Base()的时候pb所指向的虚函数表中的虚函数是Base的,用(Derived*)强制转化并没改变,而非虚函数主要根据指针类型,也就是说pd一开始就是Derived,所以用Derived的函数,成员函数在调用时其实是调用了this指针的。
阅读全文
1 0
- 将基类指针赋给派生类的问题
- 派生类对象赋给基类指针
- 数组首地址给赋给 指针的问题
- 关于将数组地址赋给指针的问题
- 给指针变量赋地址
- 将类的成员函数以函数指针的形式赋给另一个类
- 将特定的内存地址赋给一个指针
- 将父类指针赋给self的原因理解
- 如何将类成员函数指针赋给整数
- 给int赋最小值问题
- 给int赋最小值问题
- 给int赋最小值问题
- 解决给textarea赋不了值的问题
- 直接给字符指针赋字符串
- 二维数组名无法赋给指针
- 20140711_类的继承、派生、ACE框架、指针的问题、系统的问题
- 为什么下面的程序要a b c的地址赋给指针p p1 p2?
- C++让基类握住派生类的指针
- mysql ERROR 1045 (28000): 错误解决办法
- 获得中文的unicode编码
- 算法谜题103 跳到另一边
- Java的自动装箱和自动拆箱
- nginx基本配置与参数说明
- 将基类指针赋给派生类的问题
- Android就业面试技巧系列-技术篇3(屏幕适配)
- 磁盘管理之一查看磁盘信息
- 关于嵌入式linux vi写入文件到sd卡,重启没保存问题
- Android 使用Service、Thread实现断点续传思路
- sparkstreaming反压机制
- Android线程—死锁的四个产生必要条件
- Android就业面试技巧系列-技术篇4(MVP)
- luogu2044 随机数生成器