C ++ реальный метод перегрузки? - PullRequest
1 голос
/ 21 февраля 2011

У меня есть классы 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!
}

Есть ли способ перегрузить метод так, чтобы в этом случае был вызван метод WhoAreYou() для B?Когда я должен сначала привести объект, перегрузка метода, на мой взгляд, не имеет смысла ...

Спасибо за вашу помощь!

Ответы [ 2 ]

5 голосов
/ 21 февраля 2011

Ваша переменная "a" - это A, а не B. A a = B(); создает новый временный B, затем создает A, копируя часть A из B.

Попробуйте это:

B b;
A * a = &b;
a->WhoAreYou();
1 голос
/ 21 февраля 2011

Проблема связана с нарезкой .Я задал точный тот же вопрос с этой темой .

...