社区
新手乐园
帖子详情
父类的引用指向子类的对象, 调用虚函数为什么执行的是父类的
zzjweb
2016-07-28 12:37:07
我有一个A类, B:public A
A有virtual void fun(),
B有virtual void fun(),
用一个vector<A>存放一些A和一些B, 循环遍历调用fun(), 如何才能在当里面某元素是B类的时候执行B类的方法?
...全文
212
4
打赏
收藏
父类的引用指向子类的对象, 调用虚函数为什么执行的是父类的
我有一个A类, B:public A A有virtual void fun(), B有virtual void fun(), 用一个vector存放一些A和一些B, 循环遍历调用fun(), 如何才能在当里面某元素是B类的时候执行B类的方法?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
paschen
2016-07-28
打赏
举报
回复
你vector中的对象存的也不是引用,而是已经被切片后的对象了,当然不会调用子类虚函数 如果需要使用多态,在vector中应该存指针而不是对象
paschen
2016-07-28
打赏
举报
回复
你vector中的对象存的也不是引用,而是已经被切片后的对象了,当然不会调用子类虚函数 如果需要使用多态,在vector中应该存指针而不是对象
flying_music
2016-07-28
打赏
举报
回复
用指针吧,定义一个vector<A*> vec;然后把A或B对象的指针放进去,再用vec[i]->fun()调用就可以了
slmax1
2016-07-28
打赏
举报
回复
A *a = new B a->fun() 调用B类的方法 B *b = new B b->fun() 同上 这个好像是观察者模式?
cpp中,
父类
指针
指向
子类
对象
的底层原理
当
对象
的
虚函数
被
调用
时,程序会根据
虚函数
表中存储的
虚函数
地址来
调用
正确的函数实现。当
子类
继承
父类
时,
子类
会继承
父类
的
虚函数
表,同时也可能会新增自己的
虚函数
,这些新增的
虚函数
会在
子类
的
虚函数
表中添加新的
虚函数
地址。当
父类
指针
指向
子类
对象
时,程序会根据
对象
的
虚函数
表来
调用
相应的
虚函数
实现,无论这些
虚函数
是从
父类
继承而来还是在
子类
中新增的。因此,
父类
指针
指向
子类
对象
的底层原理就是通过指针所
指向
的
对象
的
虚函数
表来实现动态绑定,使得程序在运行时能够根据
对象
的实际类型来
调用
相应的
虚函数
。
c++,
父类
引用
指向
子类
对象
,
虚函数
c++有
父类
引用
指向
子类
对象
(面向
对象
的重要特点之一,java里是这样的!) #include class Father { public: Father() { f = 1; } void print() { cout<<"f = "<
父类
对象
指针
调用
子类
函数
当
父类
中声明某个函数为
虚函数
,并且
子类
得载了这个
虚函数
以后,用
父类
对象
的指针可以
调用
子类
的相应函数,但前提是该指针
指向
的
对象
是
子类
的
对象
,否则没有意义。 1.新建一个
子类
对象
时,它首先
执行
它
父类
的构造方法然后再
执行
子类
的构造方法。 2.我们new一个
子类
对象
赋给
父类
(
父类
的
引用
指向
了
子类
的
对象
,也就是说java里说的多态,),
父类
对象
不可以
调用
子类
的方法,但如果
子类
重写了
父类
的某个方法,则此时...
C++学习——
父类
指针
指向
子类
对象
的问题
父类
指针
指向
子类
实例
对象
,对于普通重写函数时,会
调用
父类
中的函数。而
调用
被
子类
重写
虚函数
时,会
调用
子类
中的函数。 这是因为
子类
中被重写的
虚函数
的运行方式是动态绑定的,与当前
指向
类实例的
父类
指针类型无关,仅和类实例
对象
本身有关。 静态绑定发生在编译期,动态绑定发生在运行期;
对象
的动态类型可以更改,但是静态类型无法更改; 在继承体系中只有
虚函数
使用的是动态绑定,其他的全部是静态绑定(成员变量也是静态绑定); 2.
对象
的动态类型可以更改,但是静态类型无法更改; class A{ public: v
怎么理解C++多态的“
父类
指针或
引用
指向
子类
对象
”?
所以用
父类
指针
指向
子类
时,没有问题,因为
父类
有的,
子类
都有,不会出现非法访问问题。但是如果用
子类
指针
指向
父类
的话,一旦访问
子类
特有的方法函数或者成员变量,就会出现非法。可以通俗的理解,
子类
可能含有一些
父类
没有的成员变量或者方法函数,但是
子类
肯定继承了
父类
所有的成员变量和方法函数。虽然
父类
指针可以
指向
子类
,但是其访问范围还是仅仅局限于
父类
本身有的数据,那些
子类
的数据,
父类
指针是无法访问的。
调用
时,可以定义
父类
的指针,然后
指向
子类
的
对象
,
指向
哪个
对象
,便
执行
其
对象
的
虚函数
实现。为什么
父类
指针可以
指向
子类
?
新手乐园
33,321
社区成员
41,774
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章