基类指针指向派生类对象的例子
时间: 2023-08-22 11:20:28 浏览: 47
假设我们有一个基类Animal和两个派生类Dog和Cat:
```c++
class Animal {
public:
virtual void makeSound() {
cout << "Animal sound" << endl;
}
};
class Dog : public Animal {
public:
void makeSound() override {
cout << "Bark" << endl;
}
};
class Cat : public Animal {
public:
void makeSound() override {
cout << "Meow" << endl;
}
};
```
现在,我们可以创建一个指向Dog对象和一个指向Cat对象的基类指针:
```c++
Animal* animal1 = new Dog();
Animal* animal2 = new Cat();
```
这些指针都指向派生类的对象。我们可以调用它们的虚函数`makeSound()`:
```c++
animal1->makeSound(); // 输出 "Bark"
animal2->makeSound(); // 输出 "Meow"
```
由于`makeSound()`是一个虚函数,编译器会在运行时确定要调用哪个版本的函数,即使它们都在基类中定义。这就是多态的概念。在这个例子中,基类指针`animal1`和`animal2`指向的是不同的对象,但它们都可以调用基类中的`makeSound()`函数以及派生类中的重载版本。
阅读全文