多态里面用基类指针访问派生类成员,报错说基类里面的成员没有派生类成员
时间: 2024-03-29 20:37:27 浏览: 21
是的,这是因为基类指针只能访问基类中的成员,而不能访问派生类中新增的成员。如果需要访问派生类中新增的成员,可以使用强制类型转换将基类指针转换为派生类指针,然后再访问该成员。但是需要注意的是,这样做存在安全风险,需要谨慎使用。另外,如果需要在基类中访问派生类中新增的成员,可以将该成员声明为虚函数,然后在派生类中重写该函数。这样,在使用基类指针调用该函数时,将会调用派生类中的实现。
相关问题
多态里面怎么用基类指针访问派生类对象里的新增成员,举例说明
可以通过强制类型转换将基类指针转换为派生类指针,然后访问该对象中的新增成员。下面是一个简单的例子:
```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++ 基类指针 调用派生类的方法
基类指针可以调用派生类的方法。这是因为基类指针可以指向派生类的对象,并且在通过指针调用方法时,会根据指针所指向的对象的类型来确定应调用的方法。
通过基类指针调用派生类的方法时,首先需要将基类指针指向派生类的对象。因为派生类对象包含了基类的成员变量和派生类自身的成员变量,所以基类指针可以访问并操作派生类对象中的所有成员变量和成员函数。
当基类指针通过指针调用方法时,编译器会根据指针所指向对象的类型来确定方法的调用方式。如果指针指向的是基类对象,则会调用基类的方法;如果指针指向的是派生类对象,则会调用派生类的方法。这个过程称为多态。
通过基类指针调用派生类的方法可以实现代码的灵活性和可扩展性。因为基类指针可以在运行时指向不同的派生类对象,所以可以根据需要调用不同的方法,而无需修改代码。
总之,基类指针可以通过指针调用派生类的方法,这是多态特性的体现,可以提高代码的灵活性和可扩展性。