C++Primer15.5节练习

news2024/9/24 9:27:29

练习15.18:

    Base* p = &d1:合法
    p = &d2:不合法,只有当派生类公有地继承基类时,用户代码才能使用派生类向基类的转换
    p = &d3:不合法,只有当派生类公有地继承基类时,用户代码才能使用派生类向基类的转换
    p = &dd1:合法
    p = &dd2:不合法,只有当派生类公有地继承基类时,用户代码才能使用派生类向基类的转换
    p = &dd3:不合法,只有当派生类公有地继承基类时,用户代码才能使用派生类向基类的转换

练习15.19:

对于类Base:合法

对于类Pub_Derv:合法

对于类Prot_Derv:合法

对于类Priv_Derv:合法

对于类Derived_from_Public:合法

对于类Derived_from_Protected:合法

对于类Derived_from_Private:不合法,因为类Derived_from_Private的直接基类Priv_Derv自Base私有继承而来,所以Derived_from_Private的成员无法使用Priv_Derv向Base,也就无法实现Derived_from_Private到Base的转换

练习15.20:

#include <iostream>
#include <string>
#include <errno.h>
using namespace std;


class Base {
public:
	void pub_mem();
	//正确
	void memfcn(Base& b) { b = *this; cout << "Base memfcn success" << endl; }
protected:
	int prot_mem;
private:
	char priv_mem;
};


struct Pub_Derv :public Base {
	int f() { return prot_mem; }
	//错误
	//char g() { return priv_mem; }
	//正确
	void memfcn(Base& b) { b = *this; cout << "Pub_Derv memfcn success" << endl;}
};

struct Priv_Derv :private Base {
	int f1()const { return prot_mem; }
	//正确
	void memfcn(Base& b) { b = *this; cout << "Priv_Derv memfcn success" << endl;}
};

struct Prot_Derv :protected Base {
	int f1()const { return prot_mem; }
	//正确
	void memfcn(Base& b) { b = *this; cout << " Prot_Derv memfcn success" << endl;}
};

struct Derived_from_Public :public Pub_Derv {
	int use_base() { return prot_mem; }
	//正确
	void memfcn(Base& b) { b = *this; cout << "Derived_from_Public memfcn success" << endl;}
};

struct Derived_from_Protected :public Prot_Derv {
	int use_base() { return prot_mem; }
	//正确
	void memfcn(Base& b) { b = *this; cout << "Derived_from_Protected memfcn success" << endl;}
};

struct Derived_from_Private :public Priv_Derv {
	//错误
	//int use_base() { return prot_mem; }
	//不正确
	//void memfcn(Base& b) { b = *this; }
};


//测试
int main()
{
	Base b1, b2;
	Pub_Derv d1;
	Priv_Derv d2;
	Prot_Derv d3;
	Derived_from_Public dd1;
	Derived_from_Private dd2;
	Derived_from_Protected dd3;
	Base* p = &d1;
	//p = &d2;
	//p = &d3;
	p = &dd1;
	//p = &dd2;
	//p = &dd3;
	b1.memfcn(b2);
	d1.memfcn(b2);
	d2.memfcn(b2);
	d3.memfcn(b2);
	dd1.memfcn(b2);
	dd3.memfcn(b2);

	
	system("pause");
	return 0;
}

结果:

练习15.21:

对于(b) 图形基元中的类型组成继承体系:

首先是所有图形的基类Figure,接下来是其派生类圆形类Circular,方形Square,椭圆形Oval、圆锥,球等等。。。

练习15.22:

公共成员:获得长、宽高的函数或者获得长,宽,高的函数

受保护成员:各种图形的长宽高

虚函数:计算图形面积、体积

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

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

相关文章

ChatGpt与Google 谁能给出最好的回答

ChatGPT由于其先进的会话和技术功能而越来越受欢迎。你可以问聊天机器人任何你想问的问题&#xff0c;它会在几秒钟内输出答案。虽然它不是一个搜索引擎&#xff0c;你应该使用ChatGPT作为你的信息来源而不是谷歌&#xff0c;百度吗? 我们来根据国外的一场测试来看一下 ChatG…

spring注解方式整合Dubbo

系列文章目录 文章目录系列文章目录一、创建一个父工程项目二、创建子模块(dubbo-api模块)二、创建子模块(dubbo-provider模块)三、创建子模块(dubbo-consumer模块)总结一、创建一个父工程项目 这里我们通过Spring Initializer 来帮我们构建一个spring-dubbo这个父项目,点击nex…

python进阶--Numyp库(一)

一、Numpy库介绍 NumPy&#xff08;Numerical Python&#xff09;是Python的⼀种开源的数值计算扩展。提供多维数组对象&#xff0c;各种派⽣对象&#xff08;如掩码数组和矩阵&#xff09;&#xff0c;这种⼯具可⽤来存储和处理⼤型矩阵&#xff0c;⽐Python⾃身的嵌套列表&am…

【Redis 高级】- 持久化 - RDB

【Redis 高级】- 持久化 - RDB &#x1f451;什么是持久化呢&#xff1f; 那当然是够持久呀&#xff0c;这个持久如果在你不主动去删除的情况下&#xff0c;它就一直存在的。 &#x1f3b7;那么这有什么用呢&#xff1f; 举个栗子&#xff1a;我们在用 PowerPoint 在写价值 …

WEB系列(二)-----------XSS

XSS原理及基础 定义 恶意攻击者会往Web页面里插入JS代码,当用户点击网页时.镶嵌的JS代码就会执行,从而达到恶意的特殊目的. 原因 程序对输入和输出的控制不够严格&#xff0c;导致payload输出到前段时被浏览器当做有效代码执行从而产生危害。 分类 存储型反射型DOM型 测…

常见排序算法--Java实现

常见排序算法--Java实现插入排序直接插入排序折半插入排序希尔排序交换排序冒泡排序快速排序选择排序直接选择排序堆排序归并排序基数排序各种排序方法比较在网上找了些排序算法的资料。此篇笔记本人总结比较&#xff0c;简单注释&#xff0c;觉得比较好理解&#xff0c;且相对…

四大步骤,教你彻底关闭Win10自动更新

文章目录一、禁用Windows Update服务二、在组策略里关闭Win10自动更新相关服务三、禁用任务计划里边的Win10自动更新四、在注册表中关闭Win10自动更新参考资料一、禁用Windows Update服务 1、同时按下键盘 Win R&#xff0c;打开运行对话框&#xff0c;然后输入命令 services…

C语言运算符优先级和结合性一览表

所谓优先级就是当一个表达式中有多个运算符时&#xff0c;先计算谁&#xff0c;后计算谁。 运算符的优先级从高到低大致是&#xff1a;单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符()和逗号运算符 简单记就是&#xff1a;&#xff01; > 算术运…

一起学 pixijs(1):常见图形的绘制

大家好&#xff0c;我是前端西瓜哥。 pixijs 是一个强大的 Web Canvas 2D 库&#xff0c;以其强大性能而著称。其底层使用了 WebGL 实现了硬件加速&#xff0c;当然如果不支持的话&#xff0c;也能回退为 Canvas。 本文使用的 pixijs 版本为 7.1.2。 Application Applicati…

【LeetCode】剑指 Offer 08. 二叉树的下一个节点 p65 -- Java Version

题目链接&#xff1a;无题目链接&#xff0c;不知道为啥力扣上找不到这一题。 1. 题目介绍&#xff08;08. 二叉树的下一个节点&#xff09; 题目&#xff1a;给定一个二叉树和其中的一个节点&#xff0c;请找出中序遍历顺序的下一个节点并且返回。注意&#xff0c;树中的节点…

linux线程阻塞中CPU的占用率

linux线程阻塞中CPU的占用率 一、简介 总所周知Linux系统下&#xff0c;我们编写的程序进入阻塞后&#xff0c;系统把任务挂起&#xff0c;交给内核进行处理&#xff0c;此时我们的进程CPU占用率不高&#xff0c;可以说是占用率0.0%&#xff0c;让CPU资源交给其他进程处理&am…

【算法】三道算法题目单词拆分,填充每个节点的下一个右侧节点指针以及组合总和

算法第一道算法题&#xff1a;单词拆分java解答参考第二道算法题&#xff1a;填充每个节点的下一个右侧节点指针java 解答参考第三道算法题&#xff1a;组合总和java解答参考大家好&#xff0c;我是小冷。 今天还是继续学习算法技术知识吧 第一道算法题&#xff1a;单词拆分 …

Docker - 镜像操作命令

镜像名称一般分为两部分组成:[repository]:[tag]在没有指定tag时&#xff0c;默认是latest&#xff0c;代表最新版本的镜像1.下载docker镜像 docker pull repository:tag2.查看本地所有镜像 docker images3.创建镜像别名 docker tag repository:tag repository111:tag4.查看镜像…

java面试题-集合篇

Collection1.Collection有哪些类&#xff1f;Java集合框架中的Collection接口是所有集合类的基础接口&#xff0c;定义了一些基本的集合操作&#xff0c;如添加元素、删除元素、判断是否包含某个元素等。常见的集合类包括List、Set和Queue。ListList接口定义了按照索引访问和操…

Module理解及使用

ES6的模块化设计思想是静态化&#xff0c;也就是说&#xff0c;在编译的时候确定模块的依赖关系&#xff0c;以及输出输出入的变量。而CommonJS和AMD模块都是在运行时确定的。ES6的模块不是对象&#xff0c;而是通过export显示指定输出的代码&#xff0c;再通过import命令输入。…

ES6新特性详解

文章目录1. let和const1.1 let声明变量1.2 const声明常量2. 模板字符串3. 解构赋值3.1 数组的解构赋值3.2 对象的解构赋值4. 函数扩展4.1 参数默认值4.2 剩余参数4.3 箭头函数5. 对象扩展5.1 对象简写5.2 属性名表达式5.3 扩展运算符6. Symbol7. Iterator和Generator7.1 Iterat…

k8s自动化安装脚本(kubeadm-1.23.7)

文章目录介绍软件架构版本介绍更新内容2023-02-192023-02-152023-02-142023-02-102022-10-202022-08-06准备部署包操作步骤环境准备结构备注解压部署包修改host文件脚本使用方式初始化环境验证ansible配置安装k8s集群登录master的节点添加node节点master节点状态检查组件安装安…

高精度算法一

目录 1. 基础知识 2. 大整数 大整数 3. 大整数 - 大整数 1. 基础知识 利用计算机进行数值计算&#xff0c;有时会遇到这样的问题&#xff1a;有些计算要求精度高&#xff0c;希望计算的数的位数可达几十位甚至几百位&#xff0c;虽然计算机的计算精度也算较高了&#xff0c…

大数据之---Nifi-处理器类别_详细了解各种处理器的含义用途---大数据之Nifi工作笔记0007

处理器有很多类这里主要分了,数据转换的可以看到上面的这些是数据转换常用的 然后: 这里这个controlrate,用来控制流的速率,来保护作用,防止崩掉 distributeLoad用来负载均衡,减轻压力 这里的路由是,根据是否满足对应的条件,来执行是否把数据路由到某个地方. 然后来看数据库…

数据库技术-函数依赖、键与约束、范式

一、函数依赖 给定一个x&#xff0c;能唯一确定一个Y&#xff0c;就称x确定Y&#xff0c;或者说Y依赖于x&#xff0c;例如YX*X函数。 函数依赖又可扩展以下两种规则: 部分函数依赖:A可确定C&#xff0c;(A,B)也可确定C,(A,B)中的一部分&#xff08;即A&#xff09;可以确定C&a…