【C++ Primer Plus习题】13.3

news2024/9/24 13:17:23

大家好,这里是国中之林!
❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←

问题:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解答:
main.cpp

#include <iostream>
#include <string>
#include "dma.h"
using namespace std;
const int CLIENTS = 4;

int main()
{
	ABC* p_clients[CLIENTS];
	char kind;
	for (int i = 0; i < CLIENTS; i++)
	{
		cout << "Select 1)ABC, 2)baseDMA, 3)lacksDMA, 4)hasDMA:";
		while (cin>>kind&&(kind!='1'&&kind!='2'&&kind!='3'&&kind!='4'))
		{
			cout << "Enter either 1 2 3 4 or 4:";
		}
		if (kind == '1')
		{
			p_clients[i] = new ABC();
		}
		else if (kind == '2')
		{
			while (cin.get() != '\n')continue;
			char l[40];
			int r;
			cout << "Enter baseDMA's label:";
			cin.getline(l, 40);
			cout << "Enter baseDMA's rating:";
			cin >> r;
			p_clients[i] = new baseDMA(l, r);
		}
		else if (kind == '3')
		{
			while (cin.get() != '\n')continue;
			char  l[40], c[40];
			int r;
			cout << "Enter lacksDMA's label:";
			cin.getline(l, 40);
			cout << "Enter lacksDMA's color:";
			cin.getline(c, 40);
			cout << "Enter lacksDMA's rating:";
			cin >> r;
			p_clients[i] = new lacksDMA(c, l, r);
		}
		else if (kind == '4')
		{
			while (cin.get() != '\n')continue;
			char  l[40], s[40];
			int r;
			cout << "Enter hassDMA's label:";
			cin.getline(l, 40);
			cout << "Enter hasDMA's style:";
			cin.getline(s, 40);
			cout << "Enter hasDMA's rating:";
			cin >> r;
			p_clients[i] = new hasDMA(s, l, r);
		}
		while (cin.get()!='\n')
		{
			continue;
		}
	}
	cout << endl;

	for (int i = 0; i < CLIENTS; i++)
	{
		p_clients[i]->View();
		cout << endl;
	}
	for (int i = 0; i < CLIENTS; i++)
	{
		delete p_clients[i];
	}
	cout << "DONE" << endl;

	return 0;
}

dma.h

#pragma once
#include <iostream>
using namespace std;

class ABC
{
public:
	virtual ~ABC(){};
	virtual void View() { cout << "This is ABC View(),it is empty.\n"; }
};

class baseDMA:public ABC
{
private:
	char* label;
	int rating;

public:
	baseDMA(const char* l = "null", int r = 0);
	baseDMA(const baseDMA& rs);
	virtual ~baseDMA();
	virtual void View()override;
	baseDMA& operator=(const baseDMA& rs);
	friend ostream& operator<<(ostream& os, const baseDMA& rs);
};

class lacksDMA :public baseDMA
{
private:
	enum{COL_LEN=40};
	char color[COL_LEN];
public:
	lacksDMA(const char* c = "blank", const char* l = "nnull", int r = 0);
	lacksDMA(const char* c, const baseDMA& rs);
	virtual void View()override;
	friend ostream& operator<<(ostream& os, const lacksDMA& ls);
};

class hasDMA :public baseDMA
{
private:
	char* style;
public:
	hasDMA(const char* s = "none", const char* l = "null",int r=0);
	hasDMA(const char* s, const baseDMA& rs);
	hasDMA(const hasDMA& hs);
	~hasDMA();
	virtual void View()override;
	hasDMA& operator=(const hasDMA& hs);
	friend ostream& operator<<(ostream& os, const hasDMA& hs);
};

dma.cpp

#include "dma.h"

baseDMA::baseDMA(const char* l, int r)
{
	label = new char[strlen(l) + 1];
	strcpy_s(label, strlen(l) + 1,l);
	rating = r;
}
baseDMA::baseDMA(const baseDMA& rs)
{
	label = new char[strlen(rs.label) + 1];
	strcpy_s(label, strlen(rs.label) + 1, rs.label);
	rating = rs.rating;
}
baseDMA::~baseDMA()
{
	delete[] label;
}
void baseDMA::View()
{
	cout << "Now in baseDMA" << endl;
	cout << *this << endl;
}
baseDMA& baseDMA::operator=(const baseDMA& rs)
{
	if (this == &rs)return *this;
	if (label)delete[] label;
	label = new char[strlen(rs.label) + 1];
	strcpy_s(label, strlen(rs.label) + 1, rs.label);
	rating = rs.rating;
	return *this;
}
ostream& operator<<(ostream& os, const baseDMA& rs)
{
	os << "label: " << rs.label << "\trating:" << rs.rating;
	return os;
}


lacksDMA::lacksDMA(const char* c, const char* l , int r ):baseDMA(l,r)
{
	strcpy_s(color, COL_LEN, c);
	if (strlen(c) >= COL_LEN)color[COL_LEN - 1] = '\0';
	else color[strlen(c)] = '\0';
}
lacksDMA::lacksDMA(const char* c, const baseDMA& rs) :baseDMA(rs)
{
	strcpy_s(color, COL_LEN, c);
	if (strlen(c) >= COL_LEN)color[COL_LEN - 1] = '\0';
	else color[strlen(c)] = '\0';
}
void lacksDMA::View()
{
	cout << "Now in lacksDMA." << endl;
	cout << *this << endl;
}
ostream& operator<<(ostream& os, const lacksDMA& ls)
{
	os << (const baseDMA&)ls;
	os << "\tColor:" << ls.color;
	return os;
}


hasDMA::hasDMA(const char* s, const char* l, int r):baseDMA(l,r)
{
	style = new char[strlen(s) + 1];
	strcpy_s(style, strlen(s) + 1, s);
}
hasDMA::hasDMA(const char* s, const baseDMA& rs):baseDMA(rs)
{
	style = new char[strlen(s) + 1];
	strcpy_s(style, strlen(s) + 1, s);
}
hasDMA::hasDMA(const hasDMA& hs):baseDMA(hs)
{
	style = new char[strlen(hs.style) + 1];
	strcpy_s(style, strlen(hs.style) + 1, hs.style);
}
hasDMA::~hasDMA()
{
	delete[] style;
}
void hasDMA::View()
{
	cout << "Now in hasDMA." << endl;
	cout << *this << endl;
}
hasDMA& hasDMA::operator=(const hasDMA& hs)
{
	if (this == &hs)return *this;
	baseDMA::operator=(hs);
	delete[]style;
	style = new char[strlen(hs.style) + 1];
	strcpy_s(style, strlen(hs.style) + 1, hs.style);
	return *this;
}
ostream& operator<<(ostream& os, const hasDMA& hs)
{
	os << (const baseDMA&)hs;
	os << "\tStyle:" << hs.style;
	return os;
}

运行结果:
在这里插入图片描述

考查点:

  • 继承
  • 多态

注意:

  • 父类的函数参数可以传子类
    在这里插入图片描述

2024年9月9日15:14:58

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

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

相关文章

[Unity]如何让选择区域(照射范围)内的物体实时高亮

前言 最近希望在Unity里实现这样一个功能&#xff1a; 黄色半透明部分是一个手电筒&#xff0c;我希望手电筒范围内的小球会高亮轮廓&#xff0c;且手电筒移出去后小球会恢复原来的样子&#xff1a; 一开始我把整个问题想的太复杂了&#xff0c;想着在Update()函数里暴力检…

使用Python自动抓取亚马逊网站商品信息

全量数据抓取不现实&#xff0c;但可以自动化、小批量采集亚马逊数据&#xff0c;现在可用的工具也非常多&#xff0c;包括Python以及一些专门的爬虫软件&#xff0c;我用过几个比较好入手的&#xff0c;像web scraper、八爪鱼、亮数据。 比如亮数据爬虫&#xff0c;它提供数据…

408:强化笔记|王道|DS|OS|CO|计网

目录 DS 数据结构算法题一、快速排序二、二路归并排序三、链表(2.3课后习题)四、二叉树五、图应用题 OS 操作系统第二章 进程与线程零、大观一、PV操作 第三章 内存管理一、内存管理大题 CO 计算机组成原理第三章 存储系统一、Cache大题二、TLB大题 第二章 数据的表示和运算第四…

Nginx之日志切割,正反代理,HTTPS配置

1 nginx日志切割 1.1 日志配置 在./configure --prefixpath指定的path中切换进去&#xff0c;找到log文件夹&#xff0c;进去后找到都是对应的日志文件 其中的nginx.pid是当前nginx的进程号&#xff0c;当使用ps -ef | grep nginx获得就是这个nginx.pid的值 在nginx.conf中…

安全测试:全面指南!

引言 随着互联网技术的快速发展&#xff0c;网络安全威胁日益增多。企业不仅需要保护其数据资产免受外部攻击&#xff0c;还需要确保内部系统的安全性。安全测试作为软件开发生命周期中的关键环节&#xff0c;旨在识别潜在的安全漏洞和风险点&#xff0c;从而提高产品的整体安…

Return arguments from function calling with OpenAI API when streaming?

题意&#xff1a;在使用OpenAI API进行流式传输时&#xff0c;如何返回函数调用的参数&#xff1f; 问题背景&#xff1a; Ive made a simple OpenAI API example with function calling. Im only using function calling to format the response, Im not calling multiple fu…

沪农商行半年报“双正增”:分红率提升,业绩增速却放缓明显

《港湾商业观察》施子夫 王璐 虽然上半年业绩增速上有所放缓&#xff0c;但沪农商行(601825.SH)33%的分红率至少对投资者来说无疑是个好消息。 今年上半年&#xff08;报告期内&#xff09;&#xff0c;沪农商行实现营业收入139.17亿元&#xff0c;同比增长0.23%&#xff1b…

TikTok运营需要的独立IP如何获取?

TikTok作为当下炙手可热的社交媒体平台&#xff0c;吸引了众多个人创作者和企业进驻。在进行TikTok运营时&#xff0c;许多经验丰富的用户都倾向于选择独立IP。那么&#xff0c;TikTok运营为什么需要独立IP&#xff1f;又该如何获取呢&#xff1f;本文将详细为您解答这些问题。…

HivisionIDPhotos

在服务器Ubuntu22.04系统下&#xff0c;HivisionIDPhotos的部署 一、安装环境&#xff1a;ubuntu基本环境配置1.更新包列表&#xff1a;2. 安装GPU驱动程序3.查看显卡信息4.下载并安装 CUDA 12.3 二、安装miniconda环境1. 下载miniconda32. 安装miniconda33. 打开用户环境编辑页…

英文站外链如何建设?

在建设英文站外链时&#xff0c;关键在于高质量和低质量&#xff08;数量多&#xff09;链接的合理搭配。几百条外链想提升网站是不现实的&#xff0c;所以数量是绝对的&#xff0c;当然&#xff0c;更重要的是&#xff0c;这些外链能够为你的网站SEO带来实际的提升 GPB外链就是…

Vue学习:计算属性Computed

计算属性可以实时监听 data节点中数据的变化&#xff0c;并 return 一个计算后的新值&#xff0c;供组件渲染 DOM 时使用&#xff0c;计算属性需要以 function 函数的形式声明到组件的 computed 节点中。 计算属性的使用注意点&#xff1a; &#xff08;1&#xff09;计算属性…

PDF转换器竟能如此简单?这款工具让无数人为之疯狂,你试过吗?

现在大家都用电脑办公&#xff0c;PDF文件因为不管在哪儿都能打开&#xff0c;而且内容不会乱&#xff0c;所以特别受欢迎。但有时候也挺麻烦的&#xff0c;比如你得改改里面的内容或者转成别的格式。到了2024年&#xff0c;如果你还被PDF文件搞得头疼&#xff0c;那就试试这四…

Cross Explosion

考查找。 线性查找上下左右四个方向看到的第一个的墙的位置复杂度O(n^2)&#xff0c;在Q取到2e5的情况下直接爆掉。 这里应使用二分查找&#xff0c;对某一行、列进行二分&#xff0c;使用set实现墙的位置存储。 #include<bits/stdc.h> using namespace std; #define…

IBM中国研发部裁员:全球化背景下的IT产业变局与应对之道

裁员风波中的思考与机遇 前言了解霍尼韦尔的“东方服务东方”施耐德电气的“中国中心”战略对比与分析 中国信息技术(IT)行业展现出蓬勃发展的前景**政府支持与政策导向****技术创新与应用****市场规模与需求****人才培养与就业**国际化与开放合作总结 前言 如何看待IBM中国研发…

C#--CM+Fody+HCWPF开发组合

CM&#xff1a;Caliburn.Micro(简称CM)一经推出便备受推崇&#xff0c;作为一款MVVM开发模式的经典框架&#xff0c;越来越多的受到wpf开发者的青睐.我们看一下官方的描述&#xff1a;Caliburn是一个为Xaml平台设计的小型但功能强大的框架。Micro实现了各种UI模式&#xff0c;用…

大学生租房平台:SpringBoot技术实现详解

第3章 系统分析 面对即将开发的系统&#xff0c;进行提前的分析是必要的。这也是开发流程中必须有的环节。通常分析系统期间&#xff0c;主要涉及的内容包括系统开发可行性问题&#xff0c;对系统功能和性能的分析等问题。 3.1 可行性分析 在正式对需要建设的项目进行投资前&am…

Gmtracker_深度学习驱动的图匹配多目标跟踪项目启动与算法流程

Gmtracker深度学习驱动的图匹配多目标跟踪项目启动与算法流程 说明&#xff1a;对于Gmtracker多目标跟踪算法中涉及到的QP或者是QAP等一些有关图匹配的问题&#xff0c;不做过多的说明只提供源代码中通过图网络的具体实现细节。 对于配置环境时产生的报错的具体信息&#xff0c…

Unity Apple Vision Pro 开发(八):模型分离与组装

XR 开发者社区链接&#xff1a; SpatialXR社区&#xff1a;完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子 课程试看&#xff1a;https://www.bilibili.com/video/BV11b421E74g 课程完整版&#xff0c;答疑仅社区成员可见&#xff0c;可以通过文章开头的链接加入…

调度算法及其性能指标

一、调度算法的评价指标 1.CPU利用率 由于早期的CPU造价极其昂贵&#xff0c;因此人们会希望让CPU尽可能多地工作 CPU利用率:指CPU“忙碌”的时间占总时间的比例。 利用率忙碌的时间/总时间 Eg: 某计算机只支持单道程序&#xff0c;某个作业刚开始需要在CPU上运行5秒&a…

python画图|极坐标中画散点图

python极坐标画图时&#xff0c;不仅可以画实线图&#xff0c;也可以画散点图。 实线图画法如下述链接。 python画图|极坐标画图基础教程-CSDN博客 今天我们一起学习一下散点图画法。 【1】官网教程 首先依然是导航到官网&#xff0c;乖乖学习官网教程&#xff1a; Scatt…