C++ 派生类指针转基类指针,基类数据发生变化
时间: 2023-10-14 07:04:39 浏览: 154
当派生类的指针被转换为基类的指针时,基类的数据不会发生变化。转换只是改变了指针的类型,指向的对象仍然是派生类的对象。
这意味着,如果你通过基类指针修改了派生类的数据成员,那么这个修改会影响到派生类对象本身,因为指针指向的是同一个对象。
以下是一个示例代码,演示了派生类指针转换为基类指针后对基类数据成员的修改:
```cpp
#include <iostream>
class Base {
public:
int data;
};
class Derived : public Base {
public:
int derivedData;
};
int main() {
Derived derivedObj;
derivedObj.data = 10;
derivedObj.derivedData = 20;
Base* basePtr = &derivedObj; // 派生类指针转换为基类指针
// 通过基类指针修改基类数据成员
basePtr->data = 30;
std::cout << "Derived data: " << derivedObj.data << std::endl; // 输出: Derived data: 30
std::cout << "Derived derivedData: " << derivedObj.derivedData << std::endl; // 输出: Derived derivedData: 20
return 0;
}
```
在上述示例中,派生类 `Derived` 继承自基类 `Base`。我们创建了一个 `Derived` 对象,并通过派生类指针 `derivedObj` 访问并修改了基类数据成员 `data` 和派生类数据成员 `derivedData`。然后,我们将派生类指针转换为基类指针 `basePtr`,并通过基类指针修改了基类数据成员 `data`。最后,我们输出了派生类对象的数据成员,可以看到基类数据成员 `data` 的修改也影响了派生类对象的数据。
需要注意的是,派生类指针转换为基类指针后,无法通过基类指针访问派生类特有的数据成员和成员函数。如果需要访问派生类特有的成员,可以使用动态类型转换或虚函数来实现。
阅读全文