基类指针指向派生类对象
2013-12-07 22:47
253 查看
根据C++指针的定义,一种类型的指针不能指向另一种类型的变量。
基类指针可以指向派生类的对象
派生类指针不可以指向基类对象
注意:即使将一个基类的指针指向一个派生类的对象,通过该指针也只能访问派生类中从基类继承来的共有成员,不能访问派生类中新增加的成员,\
除非通过强制转换将基类指针转换为派生类指针
例子:利用基类的指针指向其派生类的对象
程序运行显示结果:
不允许出现以下语句:
pa->SetB();
pa->ShowB();
pb = &a;
此外,如果把语句"pa->&b"改为"pa->&a",程序运行也会出现异常,因为后面语句:"pb = (B *)pa;"把基类指针强制转换为派生类指针pb,然后通过pb访问基类中并不存在的派生成员SetB(),ShowB();
基类指针可以指向派生类的对象
派生类指针不可以指向基类对象
注意:即使将一个基类的指针指向一个派生类的对象,通过该指针也只能访问派生类中从基类继承来的共有成员,不能访问派生类中新增加的成员,\
除非通过强制转换将基类指针转换为派生类指针
例子:利用基类的指针指向其派生类的对象
#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; }
程序运行显示结果:
不允许出现以下语句:
pa->SetB();
pa->ShowB();
pb = &a;
此外,如果把语句"pa->&b"改为"pa->&a",程序运行也会出现异常,因为后面语句:"pb = (B *)pa;"把基类指针强制转换为派生类指针pb,然后通过pb访问基类中并不存在的派生成员SetB(),ShowB();
相关文章推荐
- 基类与派生类,父类指针指向子类对象
- C++基类指针指向的派生类对象内存的释放
- 为什么要用基类指针指向派生类对象?
- 基类指针指向派生类对象
- 基类的指针指向派生类的对象
- 为什么基类指针和引用可以指向派生类对象,但是反过来不行?
- 为什么基类指针可以指向派生类对象,而派生类则不可以指向基类
- 指向派生类对象的基类指针与虚函数
- C++ 派生类指针强制指向基类对象
- 基类指针指向派生类对象
- 基类指针、派生类指针指向基类对象和派生类对象的4种方式
- 【C++】基类指针可以指向派生类对象,派生类指针不可以指向基类对象
- C++ 基类指针指向派生对象/派生类指针指向基类对象
- 为什么基类指针和引用可以指向派生类对象,但是反过来不行?
- C++ 基类指针指向派生类对象
- ?第三讲中孙老师提到的this指针到底指向基类对象还是派生类对象?
- C++ 派生类指针强制指向基类对象
- C++ 派生类指针指向基类对象
- 基类指针指向派生类对象
- 面向对象--多继承&派生类对象内存布局分析&各基类指针所指向的位置分析