首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

《C++Primer》第4版 习题15.25,派生类对基类虚函数重新定义的有关问题

2012-03-27 
《C++Primer》第4版 习题15.25,派生类对基类虚函数重新定义的问题。“基类中定义的虚函数在派生类中重新定义时

《C++Primer》第4版 习题15.25,派生类对基类虚函数重新定义的问题。
“基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同”

上面这句话我是在网上搜到的。


假定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  
这两个正确吗?

[解决办法]
“基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同”

这句话本来就有问题···
派生类的返回类型也可以是派生类的对象
[解决办法]
这几个问题还狠有点意思,错误的应该是a,d
a就不说了
b是可以的,这是个特殊情况,C++只允许返回值为该类的指针和引用这种情况
c也是可以的,默认参数是静态绑定的,这个具体得参考下effective C++
d是错误的,有const和没const是两个不同的函数,这里是有问题的,具体给你个链接
http://topic.csdn.net/u/20120303/12/a963851e-a151-4a81-9812-bb52d1942f83.html

热点排行