您的位置:首页 > 编程语言 > C语言/C++

《effective C++》:条款37——绝不重新定义继承而来的缺省参数值

2015-08-24 08:33 429 查看
引子:

阿里的一道题:

#include <IOSTREAM>
using namespace std;

class A{
public:
virtual void func(int val = 0)
{
cout<<"a~"<<val<<endl;
}

virtual void test()
{
func();
}
};
class B: public A{
public:
virtual void func(int val = 1)
{
cout<<"b~"<<val<<endl;
}

};

int main()
{
B *b = new B();
B c;
b->test();
system("pause");
}


这里输出的答案是:b~0

在effective C++中,的条款37中说绝不重新定义继承而来的缺省参数值

virtual函数是动态绑定的,而缺省参数值却是静态绑定的。

调用一个定义于derived的虚函数的同时,却可能会使用base为他指定的缺省参数值。

这主要是为了保证运行效率,在编译(前期)的时候就已经给他静态的绑定了声明时的静态类型所给定的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: