基类指针指向派生类对象
来源:互联网 发布:阿里健康 大数据应用 编辑:程序博客网 时间:2024/04/29 13:44
根据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指向派生类对象bpa->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++ 基类指针指向派生类对象
- C++ 派生类指针强制指向基类对象
- C++ 派生类指针指向基类对象
- C++ 派生类指针强制指向基类对象
- 基类的指针指向派生类的对象
- 【C++】基类指针可以指向派生类对象,派生类指针不可以指向基类对象
- 基类指针指向派生类
- 基类指针指向派生类
- 基类指针静态强制转为派生类指针,基类指针必须指向派生类的基类子对象????
- Howbbs.com可绑定域名挂广告赚钱的免费论坛
- linux、vim命令学习(学习中、不断更新)
- c# winform 关于DataGridView的一些操作
- Ubuntu常见错误,升级错误和资源锁被占用
- MacBook安装双系统多分区共享访问解决方案
- 基类指针指向派生类对象
- PHP实现RSA算法对数据加密解密
- c# winform 关于DataGridView的一些操作
- Swing —— Box容器组件
- python 得到HTML指定ID的内容
- spark-0.8.0源码剖析storage
- [cocos2d-x 学习] CCActionInterval(持续动作) 子类 CCMoveTo与CCMoveBy 之区别
- 编程趣味题3
- 嵌入式学习之路(二)——Unix命令的学习(1)