c++纯虚函数、类的组合、多态性学习记录

第一次写博客记录自己学习c++中纯虚函数、类的组合及多态性知识总结。

纯虚函数:声明形式为:      virtual  函数类型  函数名(函数形参表) =0;

       含有纯虚函数的类是抽象类,抽象类不能实例化,需要由其派生类具体给出纯虚函数的函数体的定义,如果派生类没有给出纯虚函数的函数体,则该派生类依然是一个抽象类。

类的组合:析构函数的调用顺序与构造函数的调用相反。

有new开辟在堆区的对象,需要配对使用delete释放内存。

学习案例为电脑的组装:Intel电脑和lev电脑。电脑组成三部件cpu、xianka、neicun。

#include<iostream>
using namespace std;
//抽象的cpu类 
class Cpu{
	public:
		virtual void jisuan()=0;
}; 
//抽象的显卡类 
class xianka{
	public:
		virtual void display()=0;
}; 
//抽象的内存条类
class neicun{
	public:
		virtual void memeory()=0;
}; 
//类的组合 
class computer{
	public:
		//组合类的构造函数 
		computer(Cpu * cpu,xianka *xk,neicun * cunchu): m_cpu(cpu),m_xk(xk),m_cunchu(cunchu) {
			cout<<"电脑已经装载"<<endl; 
		}
		//析构掉用new动态建立在堆区的3个电脑组件 
		~computer(){
			cout<<"电脑组件正在卸载"<<endl;
			if(m_cpu!=NULL){
				delete m_cpu;
				m_cpu=NULL;
				cout<<"cpu已释放"<<endl;
			}
			if(m_xk!=NULL){
				delete m_xk;
				m_xk=NULL;
				cout<<"xianka已释放"<<endl;
			}
			if(m_cunchu!=NULL){
				delete m_cunchu;
				m_cunchu=NULL;
				cout<<"neicun已释放"<<endl;
			}
		}
	void work(){
		m_cpu->jisuan();
		m_xk->display();
		m_cunchu->memeory();
		
	}	
	private:
		Cpu * m_cpu; 
		xianka * m_xk;
		neicun * m_cunchu;
};

//intel计算机组成的computer实例 
class intelcpu: public Cpu{
	public:
		virtual void jisuan(){
		cout<<"interl的cpu工作"<<endl;}
}; 

class intelxianka: public xianka{
	public:
		virtual void display(){
		cout<<"interl的xianka工作"<<endl;}
}; 

class intelneicun: public neicun{
	public:
		virtual void memeory(){
		cout<<"interl的内存卡工作"<<endl;}
}; 

//联想的计算机组成实例 
class levcpu: public Cpu{
	public:
		virtual void jisuan(){
		cout<<"lev的cpu工作"<<endl;}
}; 

class levxianka: public xianka{
	public:
		virtual void display(){
		cout<<"lev的xianka工作"<<endl;}
}; 

class levneicun: public neicun{
	public:
		virtual void memeory(){
		cout<<"lev的内存卡工作"<<endl;}
}; 

void inteldiannao(){
	
	Cpu * intelcpu1 = new intelcpu;
	xianka *intelxk = new intelxianka;
	neicun * intelcunchu1 = new intelneicun;
	computer * intelcomputer = new computer(intelcpu1,intelxk,intelcunchu1);
	intelcomputer->work();
	delete intelcomputer;
	cout<<"intel电脑已释放"<<endl;
//	delete intelcpu1;

//	delete intelxk;
	
//	delete intelcunchu1;

} 
void levdiannao(){
	computer * levcomputer = new computer(new levcpu,new levxianka,new levneicun);
	levcomputer->work();
	delete levcomputer;
	cout<<"联想电脑已释放"<<endl;
}
//主函数 
int main(){
	cout<<"------intel电脑准备工作------"<<endl;
	inteldiannao();
	cout<<"------联想电脑准备工作------"<<endl;
	levdiannao();
	return 0;
}

运行结果如下图所示,可以看出组合类的构造与析构调用过程相反。

 

代码书写不规范,仅记录学习过程。欢迎大家批评指正。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值