C++多态案例3----组装电脑含测试代码

news2024/11/28 17:39:14

案例描述:

  1. 电脑主要组成部件为 CPU (用于计算) ,显卡 (用于显示) ,内存条 (用于存储)
  2. 将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商
  3. 创建电脑类提供让电脑工作的函数,并且调用每个警件工作的接口
  4. 测试时组装三台不同的电脑进行工作

在这里插入图片描述
程序设计伪代码

在这里插入图片描述

测试代码

#include<iostream>
#include<string>
using namespace std;


//抽象不同的零件类
//抽象CPU类
class CPU 
{
public:
	virtual void calculate() = 0;	//计算
};

//抽象VideoCard类
class VideoCard 
{
public:	
	 virtual void display() = 0;//显示
};

//抽象Memory类
class Memory 
{
public:	
	virtual void storage() = 0;//存储
};



/****************************厂商一*****************/
///具体类继承抽象类
class IntelCPU:public CPU
{
public:
	//计算
	virtual void calculate()
	{
		cout << "Intel的CPU正式计算啦" << endl;	
	}
};


class IntelVideoCard:public VideoCard
{
public:
	//显示
	 void display()
	{
		cout << "Intel的VideoCard正式显示啦" << endl;
	}
};
class IntelMemory:public Memory
{
public:
	//存储
	virtual void storage()
	{
		cout << "Intel的Memory正式存储啦" << endl;
	}
};








/****************************厂商二*****************/
///具体类继承抽象类
class LenovoCPU :public CPU
{

public:
	//计算
	virtual void calculate()
	{
		cout << "Lenovo的CPU正式计算啦" << endl;

	}
};


class LenovoVideoCard :public VideoCard
{

public:
	//计算
	virtual void display()
	{
		cout << "Lenovo的CPU正式显示啦" << endl;

	}
};
class LenovoMemory :public Memory
{

public:
	//计算
	virtual void storage()
	{
		cout << "Lenovo的Memory正式存储啦" << endl;

	}
};



//  计算机类
class Computer {
public:
	//构造函数
	Computer(CPU *cpu, VideoCard *vc, Memory *mem)
	{
		m_cpu = cpu;
		m_vc = vc;
		m_mem = mem;
	}

	//提供工作的函数
	void work()
	{
		m_cpu->calculate();
		m_vc->display();
		m_mem->storage();

		
	}

	//提供析构函数 释放3个电脑零件
	~Computer()
	{
		if (m_cpu != NULL)
		{
			delete m_cpu;
			m_cpu = NULL;		
		}
			
		if (m_vc != NULL)
		{
			delete m_vc;
			m_vc = NULL;
		}

		if (m_mem != NULL)
		{
			delete m_mem;
			m_mem = NULL;
		}
	}




private:
	//三个私有成员变量
	CPU *m_cpu;
	VideoCard *m_vc;
	Memory *m_mem;
};


//组装电脑

void testComputer()
{


	//第一台电脑零件
	CPU *intelCpu = new IntelCPU;
	VideoCard *Intelcard = new IntelVideoCard;
	Memory *intelMem = new IntelMemory;


	

	//创建第一台电脑
	Computer *computerl = new Computer(intelCpu, Intelcard, intelMem);
	computerl->work();
	cout << "第1台电脑组装成功了" << endl;
	delete computerl;



	//创建第二台电脑
	Computer *computer2 = new Computer(new LenovoCPU, new LenovoVideoCard, new LenovoMemory);
	computer2->work();
	cout << "第2台电脑组装成功了" << endl;
	delete computer2;






}











int main()
{



	testComputer();



}





















结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/975828.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nc前端合计行、按钮组

nc前端合计行、按钮组 1.无表体和单表体的合计行加法 只要卡片下 如果是只有表头要合计行就只留ShowTotalLine&#xff1b;如果是只有表体要合计行就只留ShowTotalLineTabcodes 2.多表体的合计行加法 表头卡片下和列表下都要 3.档案的合计行加法 重写一下列表模板 …

9.4作业

服务器 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);servernew QTcpServer(this); }Widget::~Widget() {delete ui; }void Widget::on_pushButton_clicked(…

PhpStorm软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 PhpStorm是一款由JetBrains开发的专业PHP集成开发环境&#xff08;IDE&#xff09;&#xff0c;旨在提供全面的PHP开发支持。它是基于IntelliJ IDEA平台构建的&#xff0c;具有强大的功能和工具&#xff0c;可以帮助开发人员提高…

VIOOVI解析:如何进行工时测定?什么工时测定软件比较准确?

通常来说&#xff0c;在正常的操作条件下&#xff0c;普通且熟练的工人用正常的作业速度完成工作所需要的时间&#xff0c;我们将之称为标准工时。 标准工时的准确性对整个企业的生产经营起着至关重要的作用。错误的工时测定&#xff0c;提供的数据往往会引发企业高层决策上的…

【Java】Java虚拟线程开启preview

JEP 425:虚拟线程(预览版)最近被提出。这是java中一个期待已久的特性。我想试一试。所以我下载了JDK的早期版本&#xff0c;其中包含了这个项目。然而&#xff0c;它还在预览阶段。 SDK19、IntelliJ IDEA Community Edition 2023.1.4 代码&#xff1a; package com.example.…

计算机竞赛 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸表情识别 该项目较…

唯品会API接口解析,实现获得按关键字搜索vip商品

要解析唯品会API接口并实现按关键字搜索VIP商品&#xff0c;你需要进行以下步骤&#xff1a; 了解唯品会API接口文档&#xff1a;访问唯品会开放平台&#xff0c;找到API文档&#xff0c;了解唯品会提供的API接口以及相关的参数、返回值等信息。注册开发者账号&#xff1a;在唯…

【Unity-Cinemachine相机】虚拟相机旋转Composer属性详解

Look At和Aim本质是控制虚拟相机自身的旋转&#xff0c;并不一定非要看着&#xff0c;或者并不一定非要瞄着这里的游戏对象 Look At和Aim是以Look At里面的对象作为参考来旋转自身 Do nothing&#xff1a;表现出来的行为和Look At空出来一样 Composer&#xff1a;是一个标准的…

如何搭建“实战化”的统一系统脆弱性管理平台

面对层出不穷的漏洞&#xff0c;如何搭建“实战化”的统一系统脆弱管理平台&#xff0c;是网络安全厂商和客户比较头痛的事情。日前&#xff0c;国内专注于保密与非密领域的分级保护、等级保护、业务连续性安全和大数据安全产品解决方案与相关技术研究开发的领军企业——国联易…

微信小程序商城的定义、特点、优势、未来发展方向

微信小程序商城是一种新兴的电子商务模式&#xff0c;近年来风头火势&#xff0c;深受商家和消费者的喜爱。它是基于微信平台开发的一种小程序&#xff0c;用户可以通过微信进行搜索、购买商品或服务&#xff0c;实现线上购物的便利。本文将从微信小程序商城的定义、特点、优势…

5分钟带你了解什么是敏捷测试?难点显而易见!

随着敏捷开发模式的普及&#xff0c;越来越多的测试同仁也开始了敏捷测试。那么究竟什么是敏捷测试&#xff1f;敏捷测试与传统测试的主要区别是什么&#xff1f;敏捷测试的难点又是什么&#xff1f;本文会对这三个问题进行讲解。注意&#xff1a;本文只是讲解敏捷测试概念相关…

手写Mybatis:第20章-Mybatis 框架源码10种设计模式分析

文章目录 一、类型&#xff1a;创建型模式1.1 工厂模式1.2 单例模式1.3 建造者模式 二、类型&#xff1a;结构型模式2.1 适配器模式2.2 代理模式2.3 组合模式2.4 装饰器模式 三、类型&#xff1a;行为型模式3.1 模板模式3.2 策略模式3.3 迭代器模式 一、类型&#xff1a;创建型…

Kolya and Movie Theatre

Recently, Kolya found out that a new movie theatre is going to be opened in his city soon, which will show a new movie every day for nn days. So, on the day with the number 1≤i≤n, the movie theatre will show the premiere of the ii-th movie. Also, Kolya f…

手写Mybatis:第17章-Plugin插件功能实现

文章目录 一、目标&#xff1a;Plugin插件二、设计&#xff1a;Plugin插件三、实现&#xff1a;Plugin插件3.1 工程结构3.2 Plugin插件代理模式类图3.3 自定义拦截注解3.3.1 方法签名3.3.2 拦截注解 3.4 拦截器接口定义3.4.1 调用信息3.4.2 拦截器接口 3.5 类代理包装操作3.5.1…

【计算机网络】http协议

目录 前言 认识URL URLEncode和URLDecode http协议格式 http方法 GET POST GET与POST的区别 http状态码 http常见header 简易的http服务器 前言 我们在序列化和反序列化这一章中&#xff0c;实现了一个网络版的计算器。这个里面设计到了对协议的分析与处…

【力扣周赛】第 112 场双周赛(统计一个字符串的 k 子序列美丽值最大的数目(贪心+计数+组合数学)

文章目录 竞赛链接Q1&#xff1a;7021. 判断通过操作能否让字符串相等 IQ2&#xff1a;7005. 判断通过操作能否让字符串相等 II&#xff08;贪心&#xff09;Q3&#xff1a;2841. 几乎唯一子数组的最大和竞赛时代码——滑动窗口 Q4&#xff1a;8050. 统计一个字符串的 k 子序列…

电子邮件营销实例有哪些?如何做邮件营销?

可参考的电子邮件营销实例&#xff1f;营销邮件制作技巧有什么&#xff1f; 电子邮件营销是当今数字营销领域中的一个关键策略&#xff0c;旨在通过发送定制化的电子邮件与目标受众建立联系&#xff0c;提高品牌知名度、促进销售和培养客户关系。下面将介绍一些电子邮件营销的…

记录一次WMware网络问题

目录 ​编辑 一、问题描述 二、问题排查 2.1 指令ifconfig 查看ip信息 2.2 nmcli n 查看网卡状态 三、问题解决 3.1 启动 NetworkManager 网络管理器 3.2 ifup ens160 启动网卡 一、问题描述 我在我本地电脑上使用WMware虚拟机部署了k8s&#xff0c;有次正常关机后&am…

初试jsvmp加密

分析目标 目标网站 腾讯的点选验证码(我这边是本地环境&#xff0c;所以没有网址) 目标参数 cap_union_new_verify.collect 目标js文件 tdc.js?app_data 流程分析(分析算法) 我们打开我们要分析的网站&#xff0c;过一下点选验证码&#xff0c;抓一包&#xff0c;可以得到…

防雷工程中防雷接地网的应用方案

防雷接地是指在建筑物或其他设施中设置专门的接地装置&#xff0c;以防止雷电对人员、设备和建筑物造成危害的措施。防雷接地工程是防雷工程的重要组成部分&#xff0c;其主要目的是将雷电电流引入大地&#xff0c;消除雷电过电压&#xff0c;降低雷电危险。防雷接地工程应遵循…