重写函数的默认参数
Default argument of overridden function
可能重复:
虚拟函数默认参数行为
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++standers相关的解释。
获取派生函数的默认参数是不可能的,因为调用代码甚至不一定能看到该函数的原型。
考虑:
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:
虚拟函数调用在虚拟函数的声明中使用默认参数,该参数由表示对象的指针或引用的静态类型决定。派生类中的重写函数不会从它重写的函数中获取默认参数。
相关文章:
- 使函数参数默认为周围范围
- 如何将值传递给其参数(默认参数)
- 当“std::make_index_sequence”和“std::index_sequence”用于模板参数默认类型时
- C ,构造器中允许的参考参数默认值
- 哪些规则控制参数默认赋值?
- 错误:上一个规范后给出的参数默认参数
- 是否可以设计一个包含模板参数默认值的类
- 构造函数中参数C++默认值
- 如何设置依赖于其他参数的参数默认值
- C++模板参数默认函数实现
- QInput对话框参数默认值
- g++4.8.2上列表方法参数默认初始化时出错
- 在函数定义中指定参数默认值会导致错误 C2143:语法错误:'='之前缺少')'
- 函数模板:将第一个模板参数默认为第二个
- 模板模板参数默认可以引用其他模板类型的参数
- 参数默认为先例参数的值
- 如何修改一个类,使它只有一个成员函数,所有参数默认
- 内置类型的模板参数默认值
- 是否可以使用构造函数或对象作为其他类方法的参数默认值?
- 模板参数默认为更高版本