根据C++指针的定义,一种类型的指针不能指向另一种类型的变量。
- 基类指针可以指向派生类的对象
- 派生类指针不可以指向基类对象
- 注意:即使将一个基类的指针指向一个派生类的对象,通过该指针也只能访问派生类中从基类继承来的共有成员,不能访问派生类中新增加的成员,\
除非通过强制转换将基类指针转换为派生类指针
例子:利用基类的指针指向其派生类的对象
#include <iostream>
using namespace std;
class A
{
public:
void SetA(int i) { a = i; }
void ShowA() { cout<<"a = "<<a<<endl;};
private:
int a;
};
class B : public A
{
public:
void SetB(int i) { b = i; }
void ShowB() { cout<<"b = "<<b<<endl; }
private:
int b;
};
int main()
{
A a, *pa; //pa为基类对象的指针
B b, *pb; //pb为派生类对象的指针
pa = &b; //基类指针pa指向派生类对象b
pa->SetA(100); //通过基类指针pa访问派生类B中从基类A继承来的共有成员
pa->ShowA();
pb = (B *)pa; //将基类指针强制转换为派生类指针
pb->SetB(200); //不能通过基类指针pa访问派生类自己定义的成员
pb->ShowB();
return 0;
}