派生类的指针指向基类
时间: 2023-12-25 07:04:37 浏览: 78
是的,派生类的指针可以指向基类。在C++中,派生类是从基类继承而来的,因此派生类对象中包含了基类对象的所有成员变量和成员函数。由于基类指针可以指向派生类对象中的基类部分,因此可以用基类的指针或引用绑定派生类对象。同时,在public派生方式的情况下,派生类对象的指针可以直接赋值给基类指针。下面是一个例子:
```cpp
#include <iostream>
using namespace std;
class Base {
public:
void show() {
cout << "This is the base class." << endl;
}
};
class Derived : public Base {
public:
void display() {
cout << "This is the derived class." << endl;
}
};
int main() {
Derived objDerived;
Base *ptrBase = &objDerived;
ptrBase->show(); // 输出:This is the base class.
return 0;
}
```
相关问题
基类指针指向派生类对象和派生类指针指向基类
基类指针是指向基类类型的变量,它可以存储基类的对象引用。当基类指针指向派生类的对象时,由于向下兼容性,这个指针可以成功地访问基类中公共或保护的数据成员,以及覆盖的虚函数。然而,它无法访问派生类特有的私有数据成员。
相反,派生类指针是专门用于存储派生类对象的,它可以直接操作派生类的所有成员,包括基类和派生类新增的部分。因此,派生类指针不仅可以访问基类的方法,还可以访问派生类的特有方法和数据。
举个例子:
```cpp
class Base {
public:
void baseMethod() { cout << "Base method" << endl; }
private:
int privateBaseData;
};
class Derived : public Base {
public:
void derivedMethod() { cout << "Derived method" << endl; }
// 新增的私有数据
int derivedPrivateData;
};
// 基类指针示例
Base* basePtr = new Derived(); // 这样做允许通过basePtr调用Derived的方法
basePtr->baseMethod(); // 输出:"Base method"
// 但是不能访问Derived特有的私有数据
// 派生类指针示例
Derived* derivedPtr = new Derived();
derivedPtr->baseMethod(); // 输出:"Base method"
derivedPtr->derivedMethod(); // 输出:"Derived method"
derivedPtr->derivedPrivateData; // 可以直接访问派生类的私有数据
```
基类指针指向派生类对象与派生类指针指向基类对象的区别
基本指针指向派生类对象与派生类指针指向基本类对象的区别在于对象的实际类型和指针所指向的类型不同。基本指针只能够访问基类的成员,而派生指针能够访问派生类和基类的成员。需要注意的是,使用派生指针访问基类成员时需要使用强制类型转换。
阅读全文