派生类的对象的地址可以赋给指向基类的指针举例
时间: 2023-12-28 15:05:39 浏览: 63
派生类的声明-继承与派生
好的,我来举个例子。假设有一个基类 Animal,有一个成员函数 eat(),派生类 Dog 继承自 Animal,重写了它的 eat() 函数并添加了一个新的成员函数 bark()。现在我们可以创建一个 Dog 对象,然后将其地址赋给一个指向 Animal 的指针,这样就可以通过该指针来访问 Dog 对象的成员了。代码如下:
```
#include <iostream>
using namespace std;
class Animal {
public:
virtual void eat() {
cout << "Animal is eating." << endl;
}
};
class Dog : public Animal {
public:
void eat() {
cout << "Dog is eating." << endl;
}
void bark() {
cout << "Dog is barking." << endl;
}
};
int main() {
Dog myDog;
Animal* pAnimal = &myDog;
pAnimal->eat(); // 调用的是 Dog 类中的 eat() 函数
// pAnimal->bark(); // 错误,Animal 类没有 bark() 函数
return 0;
}
```
在这个例子中,我们定义了 Animal 和 Dog 两个类,Dog 继承自 Animal,重写了 eat() 函数并添加了一个新的成员函数 bark()。在 main 函数中,我们创建了一个 Dog 对象 myDog,并将其地址赋给一个指向 Animal 的指针 pAnimal。然后我们通过该指针调用了 eat() 函数,由于 eat() 在 Dog 类中被重写了,因此调用的是 Dog 类中的 eat() 函数。但是由于 Animal 类中没有 bark() 函数,因此无法通过 pAnimal 来访问 Dog 对象中的 bark() 函数。
阅读全文