C++派生类指针转基类指针,是如何找到基类数据的
时间: 2023-10-13 13:06:27 浏览: 98
C++基类指针和派生类指针之间的转换方法讲解
在C++中,派生类指针可以隐式地转换为基类指针。当将派生类指针转换为基类指针时,会丢失派生类特有的成员和方法,只能访问基类中的成员和方法。
在内存中,派生类对象的前部分是基类对象。因此,通过将派生类指针转换为基类指针,可以访问到基类对象的成员。
当通过基类指针访问基类数据时,编译器会根据偏移量来找到正确的数据。偏移量是派生类对象相对于基类对象的起始地址的偏移量。
例如,考虑下面的示例代码:
```cpp
class Base {
public:
int baseData;
};
class Derived : public Base {
public:
int derivedData;
};
int main() {
Derived derivedObj;
derivedObj.baseData = 10;
derivedObj.derivedData = 20;
Base* basePtr = &derivedObj;
// 通过基类指针访问基类数据
cout << basePtr->baseData << endl; // 输出: 10
return 0;
}
```
在上述代码中,`Derived` 类是 `Base` 类的派生类。通过将 `Derived` 类对象的地址赋给 `Base` 类指针 `basePtr`,我们可以通过 `basePtr` 访问到 `Base` 类的成员 `baseData`。
需要注意的是,如果尝试通过基类指针访问派生类特有的成员 `derivedData`,会导致编译错误。因为基类指针只能访问基类的成员和方法。
阅读全文