这周忙成狗,大补几篇总结。
继续战斗!
C++中子类与超类的方法可以有不同的默认参数,但是使用的默认参数取决于声明的变量类型,而不是底层实际的对象类型。
class Super {
public:
virtual void go(int i = 1) {
cout << "super go i = " << i << endl;
};
};
class Sub : public Super {
public:
void go(int i = 8) {
cout << "sub go i = " << i << endl;
}
};
int main(int argc, const char * argv[]) {
Super mySuper;
Sub mySub;
Super& mySuperRefToSub = mySub;
mySuper.go();
mySub.go();
mySuperRefToSub.go();
return 0;
}
运行结果如下:
super go i = 1
sub go i = 8
sub go i = 1
从上面的运行结果可以看到:C++根据描述对象的表达式类型绑定默认参数,而不是根据实际的对象类型绑定参数。所以默认参数不会继承。
网友评论