Effective C++
Avoid hiding inherited names避免掩盖继承而来的名字Never redefine an inherited non-virtual function绝不重新定义继承而来的非虚函数
1 | class A { |
Never redefine a function's inherited default parameter value绝不重新定义继承而来的缺省参数值1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23class E{
public:
virtual void func(int i = 0)
{
std::cout << "E::func()\t"<< i <<"\n";
}
};
class F : public E
{
public:
virtual void func(int i = 1)
{
std::cout << "F::func()\t" << i <<"\n";
}
};
void test2()
{
F* pf = new F();
E* pe = pf;
pf->func(); //F::func() 1 正常,就该如此;
pe->func(); //F::func() 0 哇哦,这是什么情况,调用了子类的函数,却使用了基类中参数的默认值!
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 丁丁的小窝(*^_^*)!