基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针
2016-07-20 20:52
786 查看
您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照;
如果打开速度慢,可以尝试快速版;如果想更新或删除快照,可以投诉快照。
百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。
首页 精选版块
移动开发iOS Android Qt WP云计算IaaS Pass/SaaS 分布式计算/HadoopJava技术Java SE Java Web 开发 Java EE Java其他相关.NET技术.NET Framework C# .NET分析与设计 ASP .NET VB .NETWeb开发PHP JavaScript ASP HTML(CSS) HTML5 Apache开发语言/框架Delphi VC/MFC VB C/C++ Builder 其他开发语言数据库开发MS-SQL Server Oracle PowerBuilder Informatica 其他数据库开发硬件/嵌入式开发嵌入开发(WinCE) 驱动开发/核心开发 硬件设计 单片机/工控 汇编语言 VxWorks开发Linux/Unix社区系统维护与使用区 应用程序开发区 内核源代码研究区 驱动程序开发区 CPU和硬件区
论坛帮助 论坛牛人 论坛地图 专家问答
CSDN > CSDN论坛 > C/C++ > C++习题15.25,派生类对基类虚函数重新定义的问题。 [问题点数:20分,结帖人interim2012]
快速回复 只显示楼主 关注帖子
《Primer》第4版
返回列表
管理菜单
结帖
发帖
回复
关注
【社区问答】构建分布式服务化系统
知识库-大型网站架构
问答3月活动开始啦
2016年上半年热门下载资源
如果打开速度慢,可以尝试快速版;如果想更新或删除快照,可以投诉快照。
百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。
首页 精选版块
移动开发iOS Android Qt WP云计算IaaS Pass/SaaS 分布式计算/HadoopJava技术Java SE Java Web 开发 Java EE Java其他相关.NET技术.NET Framework C# .NET分析与设计 ASP .NET VB .NETWeb开发PHP JavaScript ASP HTML(CSS) HTML5 Apache开发语言/框架Delphi VC/MFC VB C/C++ Builder 其他开发语言数据库开发MS-SQL Server Oracle PowerBuilder Informatica 其他数据库开发硬件/嵌入式开发嵌入开发(WinCE) 驱动开发/核心开发 硬件设计 单片机/工控 汇编语言 VxWorks开发Linux/Unix社区系统维护与使用区 应用程序开发区 内核源代码研究区 驱动程序开发区 CPU和硬件区
论坛帮助 论坛牛人 论坛地图 专家问答
CSDN > CSDN论坛 > C/C++ > C++习题15.25,派生类对基类虚函数重新定义的问题。 [问题点数:20分,结帖人interim2012]
快速回复 只显示楼主 关注帖子
《Primer》第4版
收藏
关注interim2012interim2012 本版等级: 本版专家分:175 结帖率:92.96% | 楼主 发表于: 2012-03-23 19:18:37 “基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同” 上面这句话我是在网上搜到的。 假定Derived继承Base,并且Base将下面的函数定义为虚函数,假定Derived打算定义自己的这个虚函数的版本,确定在Derived中哪个声明是错误的,并指出为什么错。 (a) Base* Base::copy( Base* ); Base* Derived::copy( Derived* ); (b) Base* Base::copy( Base* 0; Derived* Derived::copy( Base* ); (c) Ostream& Base::print( int, ostream& = cout ); ostream& Derived::print( int, ostream& ); (d) void Base::eval() const; void Derived::eval(); 习题15.25的答案: 错误的是 a 请问b 返回类型不同 d 多了个const 这两个正确吗? 更多 分享到: |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 回复次数:8 |
关注 getmonyinfo getmonyinfo 本版等级: 本版专家分:117 结帖率:66.67% | #1 得分:0 回复于: 2012-03-23 19:43:18 再好好看看书吧! |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
关注 lanfeng_10 lanfeng_10 本版等级: 本版专家分:1599 结帖率:87.5% | #2 得分:10 回复于: 2012-03-23 19:51:06 “基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同” 这句话本来就有问题··· 派生类的返回类型也可以是派生类的对象 |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
关注 lanfeng_10 lanfeng_10 本版等级: 本版专家分:1599 结帖率:87.5% | #3 得分:0 回复于: 2012-03-23 19:54:13 如果你在看primer ,建议把p477再看一下···引用 2 楼 lanfeng_10 的回复: “基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同” 这句话本来就有问题··· 派生类的返回类型也可以是派生类的对象 |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
关注 lanfeng_10 lanfeng_10 本版等级: 本版专家分:1599 结帖率:87.5% | #4 得分:0 回复于: 2012-03-23 19:57:42 修正下,应该是可以返回派生类对象的引用或指针 引用 2 楼 lanfeng_10 的回复: “基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同” 这句话本来就有问题··· 派生类的返回类型也可以是派生类的对象 |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
关注 qscool1987 qscool1987 本版等级: 本版专家分:5309 结帖率:99.15% | #5 得分:10 回复于: 2012-03-23 20:28:36 这几个问题还狠有点意思,错误的应该是a,d a就不说了 b是可以的,这是个特殊情况,C++ d是错误的,有const和没const是两个不同的函数,这里是有问题的,具体给你个链接 http://topic.csdn.net/u/20120303/12/a963851e-a151-4a81-9812-bb52d1942f83.html |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
关注 Roy_Smiling Roy_Smiling 本版等级: 本版专家分:1181 结帖率:89.8% | #6 得分:0 回复于: 2012-03-23 20:34:40 该回复于2012-03-26 08:55:34被版主删除 |
管理 |
关注 whdugh whdugh 本版等级: 本版专家分:66 结帖率:91.12% | #7 得分:0 回复于: 2013-09-08 14:58:31 引用 5 楼 qscool1987 的回复: 这几个问题还狠有点意思,错误的应该是a,d a就不说了 b是可以的,这是个特殊情况,C++ d是错误的,有const和没const是两个不同的函数,这里是有问题的,具体给你个链接 http://topic.csdn.net/u/20120303/12/a963851e-a151-4a81-9812-bb52d1942f83.html 想问一下 effective c++第几个条款有提到静态绑定了 |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
关注 wangliuyuedey... wangliuyuedeyu123 本版等级: 本版专家分:0 结帖率:0% | #8 得分:0 回复于: 2014-08-24 18:01:09 PRIMER p502 AND P477 15.25D选项。问题:在基类中定义一个虚函数virtual int foo()const, 而在派生类中定义一个函数是int foo().要实现动态绑定,问是否有错。 #include <iostream> #include <string> using namespace std; class Base { public: virtual int foo() const { return 3; } }; class Derive:public Base { public: int foo() { return 4; } }; int main() { Base base; Derive derive; Base *p=&base; cout<<p->foo()<<endl; p=&derive; cout<<p->foo()<<endl; Derive *pb=&derive; cout<<pb->foo()<<endl; system("pause"); return 0; } 为什么会出现这个结果呢?因为一个函数用const声明和不用const声明是不一样的,不会重复定义,也就是说:如果在一个作用域中定义了两个函数 int foo()const { return 2; } int foo() { return 3; } 这两个函数是不会造成重定义的,它们是不同的函数。 因此派生类中的foo()并不是继承自基类的虚函数,而是把基类的虚函数给屏蔽了。P477说:如果派生类中没有重定义某个虚函数,则使用基类的版本,因此第二个动态绑定调用的是基类的虚函数版本。 因此可以这样引申:在派生类中重新定义基类中的虚函数就OK. #include <iostream> #include <string> using namespace std; class Base { public: virtual int foo() const//基类的虚函数 { return 3; } }; class Derive:public Base { public: int foo()const//重定义基类的虚函数 { return 5; } int foo()//和上面的虚函数构成重载 { return 4; } }; int main() { Base base; Derive derive; Base *p=&base; cout<<p->foo()<<endl; p=&derive; cout<<p->foo()<<endl; Derive *pb=&derive; cout<<pb->foo()<<endl;//输出4是因为调用foo的对象不是const的。 system("pause"); return 0; } |
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 |
管理菜单
结帖
发帖
回复
关注
【社区问答】构建分布式服务化系统
知识库-大型网站架构
问答3月活动开始啦
2016年上半年热门下载资源
本帖子已过去太久远了,不再提供回复功能。
相关文章推荐
- Codeforces Round #330 (Div. 2) B 容斥原理
- VM12安装一个干净的CentOS-6.5(mini版本)
- 弹性滑动的实现与工作原理
- C语言如何"实现"面向对象?
- Memcached入门
- eclipse中egit插件使用
- hdu 5279 Rigid Frameworks
- iscroll
- 最长回文串
- UVA 340
- jQuery Mobile 导航栏
- 【POJ2389】Bull Math(大数乘法)
- android的DeepLink
- 缓存:Memcached Redis
- Maven初接触
- Codeforces Round #363 (Div. 2)题解
- 使用xshell链接本地虚拟机
- UVA101The Blocks Problem(小模拟+STL)
- HDU3791
- HDOJ 1212 Big Number(大数同余)