我有课程A
和B
。 B
派生自A
并重载方法WhoAreYou()
,当我现在创建类型为A
的变量并将值设置为B
对象然后调用WhoAreYou()
,调用A
的方法。看看这个:
class A{
public:
virtual void WhoAreYou(){
cout << "I am A!"<<endl;
}
};
class B: public A{
public:
void WhoAreYou(){
cout << "I am B!" << endl;
}
};
int main(int argc, char ** argv){
A a = B();
a.WhoAreYou(); //Output: I am A!
}
有没有办法重载方法,在这种情况下,将调用B的WhoAreYou()
方法?当我必须首先抛出物体时,在我看来,重载方法并不合理......
谢谢你的帮助!
答案 0 :(得分:5)
你的“a”变量是A,而不是B. A a = B();
创建一个新的临时B,然后通过复制B的A部分来创建A.
试试这个:
B b;
A * a = &b;
a->WhoAreYou();
答案 1 :(得分:1)
问题与切片有关。我用this topic询问完全相同的问题。