IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++纯虚函数、类的组合、多态性学习记录 -> 正文阅读

[C++知识库]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;
}

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

?

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

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:15:53  更:2021-07-24 11:16:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 21:53:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码