我有一個Animal
的數組。C++:多態:調用超級函數
默認情況下,Animal
表示"Animal"
。
我也有Cat
,它擴展了Animal
並且改爲"Meow"
。
我也有Dog
,它延伸Animal
並且說"Woof"
代替。
我想要什麼:
Animal* a[2];
a[0] = new Cat();
a[1] = new Dog();
a[0]->talk(); //Meow
a[1]->talk(); //Woof
會發生什麼:
Animal* a[2];
a[0] = new Cat();
a[1] = new Dog();
a[0]->talk(); //Animal
a[1]->talk(); //Animal
//頭
class Animal {
public:
Animal();
~Animal();
int talk() {return 0;}
};
class Cat : public Animal {
public:
Cat();
~Cat();
int talk() {return 1;}
};
class Dog : public Animal {
public:
Dog();
~Dog();
int talk() {return 2;}
};
//.cpp
void letsHear(Animal *a) {
_LOG_INFO() << a->talk();
}
int main(){
Animal* a[2];
a[0] = (Animal *)new Cat();
a[1] = (Animal *)new Dog();
letsHear((Animal *)new Cat()); //0
letsHear((Animal *)new Dog()); //0
letsHear(new Animal()); //0
letsHear(a[0]); //0
letsHear(a[1]); //0
return 0;
}
Cat::Cat() {}
Cat::~Cat(){}
Dog::Dog() {}
Dog::~Dog() {}
Animal::Animal() {}
Animal::~Animal() {}
這不是合法的C++。 – Puppy
所以指針現在可以使用'.'?你有沒有試過'a [1] - > talk();' – dtech
我剛修好'.'。 – RainingChain