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

Derived中派生类中的宣言

2013-09-24 
Derived中派生类中的声明C++Primer p502 题15.25假定Derived继承Base,并且Base将下面的函数定义虚函数,Der

Derived中派生类中的声明
C++Primer p502 题15.25
假定Derived继承Base,并且Base将下面的函数定义虚函数,Derived定义自己的这个虚函数的版本,确定在Derived中哪个声明是错的,并指出为什么?


///(a)
Base* Base::copy(Base*);
Base* Derive::copy(Derive*);
///(b)
Base* Base::copy(Base*);
Derive* Derive::copy(Derive*);
///(c)
ostream& Base::print(int, ostream &= cout);
ostream& Derived::print(int, ostream&);
///(d)
void Base::eval()const;
void Derive::eval();

书上的解释a是错的,函数参数不同,发生了重载,这个没有疑问。
c和d为什么是对的啊?
c: Base类中虚函数有默认实参,派生类修改了这个默认实参,这个也对?
d:应该是错的吧,derived类声明中是不是应该加上const
求解?
[解决办法]

d 是错的,但是编译可以通过!!!!
c 是对的,默认实参和可否重载没有关系,只是如果缺省值不一致,使用Base定义的那个。

热点排行