当前位置: 首页 > news >正文

C++Primer15.5节练习

练习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.lryc.cn/news/12858.html

相关文章:

  • 【日常点滴019】Python制作流浪气球游戏(导弹射击类)
  • effective c++阅读之旅---条款29
  • Android system — 进程生命周期与ADJ
  • vue3+ts+node个人博客系统(三)
  • Python第三方模块
  • 怎样查询PMP成绩?
  • 说说变量 __name__ 和它可能取到的一个值 __main__
  • 软考高级-信息系统管理师之整体管理(最新版)
  • JVM学习篇垃圾收集器ParNewCMS与底层三色标记算法详解
  • 基于FFmpeg和Screen Capturer Recorder实现屏幕和声音的录制
  • 猿人学14题详解
  • Allegro如何快速把推挤的走线变平滑操作指导
  • nginx基础学习
  • 【HDFS】FsDatasetImpl#recoverClose方法
  • 加油站会员管理小程序实战开发教程15 完结篇
  • 学习 Python 之 Pygame 开发坦克大战(五)
  • 【ROS】Windows系统安装ROS体验
  • 第1讲-初步认识数据库系统(测试题总结)
  • 进程-操作系统结构
  • 【网络原理6】数据链路层协议——以太网
  • 组合数学原理与例题
  • 【机器学习 深度学习】通俗讲解集成学习算法
  • 汉字----dgfont
  • C# chart绘图 鼠标响应
  • 结构体与引用
  • 13.罗马数字转整数
  • JVM垃圾回收机制
  • Java File类、IO流、Properties属性类
  • MySQL备份恢复(十二)
  • 【Java|golang】1792. 最大平均通过率---封装最小堆