5
我有许多继承派生类的基类。像这样:
多态性&默认值:可以共存吗?
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;
}
};
为了简洁,我只继承了两个类。
这是主要的:
A* aArray[] = {
new B,
new C,
};
int main() {
aArray[0]->f();
aArray[0]->f();
return 0;
}
当我运行程序时,我得到的回复是输出:
bar
bar
随便怎么样,如果编译器会忽略的重载函数的默认参数。
这是正常的,还是有一些我做错了或我错过了?
默认参数可能会使功能签名不同。最大限度地提高警告并重新编译。 –
@ThomasMatthews:那么解决方案可能是什么?可以在基类虚拟函数中删除默认参数并将它们留在继承的重写函数中吗? – Overflowh
@Overflowh:尝试实验:删除函数签名中的默认分配并重新测试。 –