多态里面怎么用基类指针访问派生类对象里的新增成员,举例说明
时间: 2023-08-22 14:07:20 浏览: 106
可以通过强制类型转换将基类指针转换为派生类指针,然后访问该对象中的新增成员。下面是一个简单的例子:
```cpp
#include <iostream>
using namespace std;
class Animal {
public:
virtual void speak() {
cout << "Animal speaks!" << endl;
}
};
class Cat : public Animal {
public:
void speak() {
cout << "Cat speaks!" << endl;
}
void climb() {
cout << "Cat climbs!" << endl;
}
};
int main() {
Animal* animal = new Cat();
// 使用基类指针调用基类的成员函数
animal->speak();
// 将基类指针转换为派生类指针
Cat* cat = dynamic_cast<Cat*>(animal);
// 访问派生类对象中新增的成员
cat->climb();
delete animal;
return 0;
}
```
在上面的例子中,首先创建了一个基类指针 `animal`,并将其指向一个派生类对象 `Cat`。接着,通过基类指针调用基类的成员函数 `speak()`。然后,使用 `dynamic_cast` 将基类指针转换为派生类指针 `cat`。最后,通过派生类指针访问派生类对象中新增的成员 `climb()`。需要注意的是,在使用 `dynamic_cast` 进行类型转换时,需要将基类指针转换为指向具有多态性的类(包括基类或派生类)的指针,否则将会失败。
阅读全文