lundi 22 janvier 2018

Is it valid to have base class attribute even though it is virtual when downcasting is done

Please refer to below code:

#define mPtr (static_cast<Dog*> (new(Animal)))

class Animal{
    public:
    virtual void talk(){cout<<"A";}
};
class Dog:public Animal{
    int test;
    public:
    void talk(){bark();}
    void bark(){
        test=0;cout<<test;
    }
};

int main() {

    mPtr->talk();
    mPtr->bark();
    return 0;
}

Output:

A0

Is it valid or an undefined behaviour to have base class talk() is executing?

Aucun commentaire:

Enregistrer un commentaire