覆盖函数的默认参数[重复]
Posted
技术标签:
【中文标题】覆盖函数的默认参数[重复]【英文标题】:Default argument of overridden function [duplicate] 【发布时间】:2012-10-08 05:29:22 【问题描述】:可能重复:virtual function default arguments behaviour
class Human virtual void print(int height =72) cout << "Human: " << height << endl; ;
class Child:public Human void print(int height =48) cout << "Child: " << height << endl; ;
int main()
Human * brother = new Child();
brother->print();
结果是这样的
Child: 72
为什么它从基类获取默认参数,从派生类获取函数定义?期待与 C++ 标准相关的解释。
【问题讨论】:
看看这个:***.com/questions/6464404/… 【参考方案1】:传递给函数的参数由调用函数的代码决定。函数的行为,一旦被调用,就取决于类。如果您需要这种行为,请创建一个不带参数的虚函数。
获取派生函数的默认参数是不可能的,因为调用代码甚至不一定能看到该函数的原型。
考虑:
void someFunction(Human *h)
h->print();
这段代码可能不知道存在一个派生自Human
的类,该类有一个默认值为48 的print
函数。而且,无论如何,它无法知道实际传递该值.
这段代码编译很久之后,它可能会链接到这样的代码:
class BasketBallPlayer : public Human
void print(int height = 84);
Human *j = new BasketBallPlayer();
someFunction(j);
见 8.3.6.10:
虚函数调用使用虚函数声明中的默认参数,由表示对象的指针或引用的静态类型确定。派生类中的覆盖函数不会从它覆盖的函数中获取默认参数。
【讨论】:
以上是关于覆盖函数的默认参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章