Ove*_*owh 5 c++ polymorphism virtual inheritance
我有一个基类,有许多继承的派生类.像这样的东西:
class A {
public:
virtual void f(string foo = "bar") {
cout << foo << endl;
}
};
class B: public A {
public:
void f(string foo = "howdy") {
cout << foo << endl;
}
};
class C: public A {
public:
void f(string foo = "something") {
cout << foo << endl;
}
};
Run Code Online (Sandbox Code Playgroud)
为简洁起见,我只继承了两个类.
这是主要的:
A* aArray[] = {
new B,
new C,
};
int main() {
aArray[0]->f();
aArray[0]->f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,我得到的输出是:
bar
bar
Run Code Online (Sandbox Code Playgroud)
就像编译器忽略被覆盖函数的默认参数一样.
这是正常的,还是有些事情我做错了或者我错过了?
默认值是静态绑定的.换句话说,它们没有多态行为.这就是你看到的原因
bar
bar
Run Code Online (Sandbox Code Playgroud)
而不是派生类的虚函数中的那些默认值.
根据Effective C +:
如果默认参数值是动态绑定的,编译器必须想出一种方法来确定运行时虚函数参数的适当默认值,这比编译期间确定它们的当前机制要慢一些.