社区
工具平台和程序库
帖子详情
下面的派生类的虚拟函数的重新声明对吗?
古布
2003-12-24 07:21:04
(1) base* base::copy( base* ); // 父类
base* derived::copy( base* ); // 子类
(2) base* base::copy( base* ); // 父类
base* derived::copy( derived* ); // 子类
那位高手给我说具体些,我在这里谢了!!!
...全文
86
9
打赏
收藏
下面的派生类的虚拟函数的重新声明对吗?
(1) base* base::copy( base* ); // 父类 base* derived::copy( base* ); // 子类 (2) base* base::copy( base* ); // 父类 base* derived::copy( derived* ); // 子类 那位高手给我说具体些,我在这里谢了!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
deyi
2003-12-30
打赏
举报
回复
同意 hz129(古雨) 的写法。
hz129
2003-12-30
打赏
举报
回复
(1) virtual base* base::copy( base* ); // 父类
virtual base* derived::copy( base* ); // 子类 <-- 正确
(2) virtual base* base::copy( base* ); // 父类
virtual base* derived::copy( derived* ); // 子类 <-- 错误,其实是声明了一个新的函数,应改为
virtual derived* derived::copy( base* );
我记得这可能是叫做“协变返回类型”吧
sharkhuang
2003-12-29
打赏
举报
回复
你的意思是overload吗?
QQQiang
2003-12-29
打赏
举报
回复
這個題目:如果你在非標準的C++編譯器上編譯可能通不能,不過在標準C++編譯器上,現在好像能通過了...好像是這樣子的(不确定)....
kaphoon
2003-12-25
打赏
举报
回复
对啊
讲的明白些
你这样讲太抽象了
sixsavage
2003-12-25
打赏
举报
回复
两个类写完整嘛
cxjddd
2003-12-24
打赏
举报
回复
不知道你是要怎么用。
是从外面 copy 到 this,还是从 this 里 copy 到外面?
zyOOOOOO
2003-12-24
打赏
举报
回复
mark
昌意
2003-12-24
打赏
举报
回复
楼主这么写好像不大对吧,
我怎么看不明白
C++语言基础视频教程
C++语言基础视频培训课程:本课与主讲者在大学开出的程序设计课程直接对接,准确把握知识点,注重教学视频与实践体系的结合,帮助初学者有效学习。本教程详细介绍C++语言中的封装、数据隐藏、继承、多态的实现等入门知识;主要包括类的
声明
、对象定义、构造函数和析构函数、运算符重载、继承和派生、多态性实现等。课程需要有C语言程序设计的基础(可以利用本人开出的《C语言与程序设计》系列课学习)。学习者能够通过实践的方式,学会利用C++语言解决问题,具备进一步学习利用C++开发应用程序的基础。
C++:在
派生类
里重载基类的
虚拟函数
如果在
派生类
内重载了基类的
虚拟函数
: 可以看到,如果在
派生类
中重载了基类的
虚拟函数
,那么
派生类
的版本依然会掩盖基类版本的可见性。但是为什么通过指向
派生类
的基类指针调用的都是基类版本呢?个人认为:虚函数是通过虚函数表实现的,如果
派生类
重写了基类的虚函数,那么
派生类
中会将对应的虚函数表的虚函数地址更新为
派生类
中重写的虚函数,如果没有那么依然使用的是基类中的虚函数地址。但是对于
派生类
重载了虚函数这种情况,由于重载函数在基类的虚函数表中不存在,所以虚函数表中依然会保存基类虚函数的索引及地址,然后在
派生类
中会增加
虚函数的调用问题(关于
派生类
、基类,
派生类
中
声明
的虚函数)
感觉放几张图大家就应该清楚了: 这是以A类作为基类指针,但是最初只在B中
声明
的虚构函数的调用问题,明显,虚函数并没有起作用 这里添加了以B为直接基类的
派生类
D,仍以A类作为基类指针,但是最初只在B中
声明
的虚构函数的调用问题,明显,虚函数并没有起作用 这里添加了以B为直接基类的
派生类
D,以B类作为基类指针,但是最初只在B中
声明
的虚构函数的调用问题,明显,虚函数起作用了 并且,明显可以看出,...
C++:在
派生类
里重载基类的非
虚拟函数
重载非
虚拟函数
: 可以通过using在
派生类
中开放基类版本的可见性: 结论:1.如果不通过using在
派生类
中
声明
基类版本的可见性,那么
派生类
内重载的非
虚拟函数
会掩盖基类版本。也就是说,基类中只有基类的版本,
派生类
中只有
派生类
的版本。2.如果通过using在
派生类
中
声明
基类版本的可见性,那么
派生类
内可以看到基类版本,即:基类只有基类的版本,
派生类
中同时有基类和
派生类
的版本。3.不论是通过对象调用还是指针调用,都是安装对象和指针
声明
时的静态类型,到对应的类中匹配可调用的版本。也就是说基类对象和基类指针
对于
派生类
的构造函数,在定义对象时构造函数的执行顺序
牛客网原题,记录下来。。 对于
派生类
的构造函数,在定义对象时构造函数的执行顺序为? 1:成员对象的构造函数 2:基类的构造函数 3:
派生类
本身的构造函数 顺序为213; 当
派生类
中不含对象成员时 · 在创建
派生类
对象时,构造函数的执行顺序是:基类的构造函数→
派生类
的构造函数; · 在撤消
派生类
对象时,析构函数的执行顺序是:
派生类
的构造函数→基类的构造函数。 当
派生类
中含
工具平台和程序库
24,854
社区成员
27,343
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章