类间通信-继承当中类间
来源:互联网 发布:手机查看gta5角色数据 编辑:程序博客网 时间:2024/06/05 09:10
例:如图,类图和内存图,实现链式输出
①
#include<iostream>using namespace std;class Base{protected:Base *next;public: Base() { cout<<"Base create"<<endl; } virtual void fun()=0; virtual ~Base() { cout<<"Base des"<<endl; }};class D1:public Base{private:int x;public: D1() { x=0; next=NULL; cout<<"D1()"<<endl; } D1(int i,Base *t) { x=i; next=t; cout<<"D1(int,Base *)"<<endl; } void fun() { cout<<"x="<<x<<endl; if(next) next->fun(); } ~D1() { cout<<"D1 des"<<endl; }};class D2:public Base{private:int y;public: D2() { y=0; next=NULL; cout<<"D2()"<<endl; } D2(int i,Base *t) { y=i; next=t; cout<<"D2(int,Base *)"<<endl; } void fun() { cout<<"y="<<y<<endl; if(next) next->fun(); } ~D2() { cout<<"D2 des"<<endl; }};class D3:public Base{private:int z;public: D3() { z=0; next=NULL; cout<<"D3()"<<endl; } D3(int i,Base *t) { z=i; next=t; cout<<"D3(int,Base *)"<<endl; } void fun() { cout<<"z="<<z<<endl; if(next) next->fun(); } ~D3() { cout<<"D3 des"<<endl; }};class My{private:Base *pBase;public: My(Base *t) { pBase=t; cout<<"My(Base *)"<<endl; } void dofun() { pBase->fun(); } ~My() { cout<<"My des"<<endl; }};int main(void){ D3 *pD3=new D3(5,NULL); D2 *pD2=new D2(4,pD3); Base *pD1=new D1(3,pD2); My *pMy=new My(pD1); pMy->dofun(); delete pD1; delete pD2; delete pD3; delete pMy; return 0;}
②将next改为私有,需要添加WinNext()方法的来获取next
#include<iostream>using namespace std;class Base{private:Base *next;public: Base() { next=NULL; cout<<"Base create"<<endl; } Base(Base *t) { next=t; cout<<"Base create"<<endl; } virtual void fun()=0; void WinNext() { if(next) next->fun(); } virtual ~Base() { cout<<"Base des"<<endl; }};class D1:public Base{private:int x;public: D1() { x=0; cout<<"D1()"<<endl; } D1(int i,Base *t):Base(t) { x=i; cout<<"D1(int,Base *)"<<endl; } void fun() { cout<<"x="<<x<<endl; WinNext(); } ~D1() { cout<<"D1 des"<<endl; }};class D2:public Base{private:int y;public: D2() { y=0; cout<<"D2()"<<endl; } D2(int i,Base *t):Base(t) { y=i; cout<<"D2(int,Base *)"<<endl; } void fun() { cout<<"y="<<y<<endl; WinNext(); } ~D2() { cout<<"D2 des"<<endl; }};class D3:public Base{private:int z;public: D3() { z=0; cout<<"D3()"<<endl; } D3(int i,Base *t):Base(t) { z=i; cout<<"D3(int,Base *)"<<endl; } void fun() { cout<<"z="<<z<<endl; WinNext(); } ~D3() { cout<<"D3 des"<<endl; }};class My{private:Base *pBase;public: My(Base *t) { pBase=t; cout<<"My(Base *)"<<endl; } void dofun() { pBase->fun(); } ~My() { cout<<"My des"<<endl; }};int main(void){ D3 *pD3=new D3(5,NULL); D2 *pD2=new D2(4,pD3); Base *pD1=new D1(3,pD2); My *pMy=new My(pD1); pMy->dofun(); delete pD1; delete pD2; delete pD3; delete pMy; return 0;}
③若将x,y,z全部统一为data,则可将纯虚函数改为虚函数,来替代WinNext()不推荐使用
virtual void fun(){ cout<<data; if(next) next->fun();}
阅读全文
0 0
- 类间通信-继承当中类间
- boost当中timer类
- 关于Java当中Class类
- Java当中的String类
- Android当中Configuration类简介
- Android当中Handler类简介
- Java类当中初始化模块
- java当中类和对象
- C++当中的virtual继承
- C++当中的virtual继承
- C++当中的virtual继承
- 进程间通信——文件映射与句柄继承
- Android通过继承Binder类实现多进程通信
- 类间关系之继承
- Java当中的分页显示公共类
- Qt 当中常用类的中文说明
- Qt 当中常用类的中文说明
- 关于Java当中的RunTime类
- 第五节:浏览器的基本操作
- 不是每个对不起,都能换回来一个没关系。
- Nginx:虚拟主机配置
- ehcache 缓存学习使用总结
- Android数据库知识点总结
- 类间通信-继承当中类间
- 6个月四维彩超
- 前端框架组件设计的个人理解
- C++写类的时候,涉及到对象成员的时候的两个有感
- c++最近公共祖先LCA(倍增算法和tarjan)
- SQL查询表的列名
- 搭建高可用mongodb集群 replica set—— 副本集
- 线上福快
- 同步调用、回调和异步调用区别