我有一个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