codeshepard level
获赞
52
粉丝
0
关注
0
看过 TA
2
上海交通大学
2018
C++
IP属地:未知
暂未填写个人简介
私信
关注
2017-09-07 12:13
上海交通大学 C++
0 点赞 评论 收藏
分享
2017-09-05 14:55
上海交通大学 C++
有一个小问题,在c++里,有一个基类base,和一个子类der。我现在声明一个base b = der(); 和一个 base *bp = new der();。那b和bp的区别在哪里?用b来调用函数时,只能调用父类base的函数,而bp可以调用子类重写的函数,这是为什么?
OSIRISSABER:base b=der()的执行过程是这样的:1、构造一个栈上的der临时对象2、调用base的拷贝构造函数,将der对象作为参数传入,此时der对象会隐式转化为base对象3、base对象构造完,der临时对象销毁最终结果就是构造了一个栈上的base对象,你用b肯定只能调用base的函数;base *bp=new der()的执行过程是这样的:1、在堆上构造一个der对象2、bp指针指向这个对象这种情况下,bp的静态类型是base,但是动态类型是der,因此会触发虚函数机制,调用der的虚函数实现
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务