覆盖具有不同签名的方法

时间:2015-01-06 17:47:27

标签: c++ inheritance override

看一下以下示例:

Class A{

virtual foo(int& a){ cout << "this is A";}

}


Class B: public A{
foo(int a){cout << "this is B";}
}
主要部分内的

int prm= 6;

A* myA= new B();

myA->foo(prm);

当我测试这段代码时,看起来A的foo方法就是发生的那个, 即使我改变foo的签名,在A处取“int”而在B处取“double”并使用myA.foo(5.5),它仍然使用A的foo。 你能解释一下“幕后”会发生什么,为什么编译器会假设我想要的方法是A的foo,即使myA的动态类型是B?

请注意,在这个问题中我使用A * myA,因此myA的静态类型是基类。在标记为重复的问题中,使用B * myA(对象的静态类型是派生类,而不是基类)。此代码编译(再次,与标记为重复的问题不同),但在运行时时以意外的方式运行。

0 个答案:

没有答案