C ++实际方法重载?

时间:2011-02-21 12:28:58

标签: c++ overloading

我有课程ABB派生自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()方法?当我必须首先抛出物体时,在我看来,重载方法并不合理......

谢谢你的帮助!

2 个答案:

答案 0 :(得分:5)

你的“a”变量是A,而不是B. A a = B();创建一个新的临时B,然后通过复制B的A部分来创建A.

试试这个:

B b;
A * a = &b;
a->WhoAreYou();

答案 1 :(得分:1)

问题与切片有关。我用this topic询问完全相同的问题。