多态里面用基类指针访问派生类成员,报错说基类里面的成员没有派生类成员
时间: 2024-03-29 22:37:27 浏览: 70
是的,这是因为基类指针只能访问基类中的成员,而不能访问派生类中新增的成员。如果需要访问派生类中新增的成员,可以使用强制类型转换将基类指针转换为派生类指针,然后再访问该成员。但是需要注意的是,这样做存在安全风险,需要谨慎使用。另外,如果需要在基类中访问派生类中新增的成员,可以将该成员声明为虚函数,然后在派生类中重写该函数。这样,在使用基类指针调用该函数时,将会调用派生类中的实现。
相关问题
多态里面怎么用基类指针访问派生类对象里的新增成员,举例说明
可以通过强制类型转换将基类指针转换为派生类指针,然后访问该对象中的新增成员。下面是一个简单的例子:
```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` 进行类型转换时,需要将基类指针转换为指向具有多态性的类(包括基类或派生类)的指针,否则将会失败。
基类指针指向派生类以实现多态
好的,你的问题是关于多态方面的编程技术。基类指针指向派生类对象,可以实现多态,即同一操作作用于不同的对象,产生不同的效果。这个技术在C++中很常用,可以通过基类的纯虚函数定义接口,然后派生类实现具体的功能,这样通过基类指针可以在运行时动态地调用不同的派生类实现,实现多态的效果。如果你有更具体的问题,可以继续问我。
阅读全文