实验7 继承与派生

(代码基于visual studio2019)

一、 实验目的

(1) 学习声明和使用类的继承关系,声明派生类

(2) 熟悉不同继承方式下对基类成员的访问控制

(3) 学习利用虚基类解决二义性问题

二、实验任务

(1)声明一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。

(2)声明一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。

(3)声明一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车类有高度(Height)等属性,汽车类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意吧vehicle设为虚基类,如果不把vehicle设为虚基类,会有什么问题?编程试试看。

三、实验步骤

(1)编写程序声明基类Animal,成员变量age声明为私有的。构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值,会出现错误提示。

#include<iostream>
using namespace std;
class Animal {private:int age;
};
class dog :public Animal {public:void SetAge(int n) { age = n; }int GetAge() { return age; }
};
void main()
{dog d;d.SetAge(3);cout << "Age=" << d.GetAge() << endl;
}

运行结果:

若把age改为公有成员变量

#include<iostream>
using namespace std;
class Animal {public:int age;
};
class dog :public Animal {public:void SetAge(int n) { age = n; }int GetAge() { return age; }
};
void main()
{dog d;d.SetAge(3);cout << "Age=" << d.GetAge() << endl;
}

输出结果:

(2)编写程序声明一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数的执行情况。

#include<iostream>
using namespace std;
class BaseClass {public:BaseClass() { cout << "构造了一个Base类的对象" << endl; }~BaseClass() { cout << "析构了一个Base类的对象" << endl; }
private:int Number;
};
class DerivedClass :public BaseClass {public:DerivedClass() { cout << "构造了一个BaseDerived类的对象" << endl; }~DerivedClass() { cout << "析构了一个BaseDerived类的对象" << endl; }
};
void main()
{DerivedClass a;
}

输出结果:

可以发现构造/析构函数的调用顺序:先调用基类的构造函数,再调用派生类的构造函数;调用析构函数的顺序与之相反。

(3)用Debug功能跟踪程序的执行过程,观察基类和派生类的构造函数和析构函数的执行情况。

(4)编写程序声明一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车(motorcycle)类,注意把vehicle派生为虚基类。再从bicycle和motorcar派生出摩托车类,在main函数中测试这个类。

#include<iostream>
using namespace std;
class vehicle {public:void run() { cout << "vehicle类开始运行" << endl; }void stop() { cout << "vehicle类停止运行" << endl; }
protected:int MaxSpeed;int Weight;
};
class bicycle :virtual public vehicle {protected :int Height;
};class motorcar :virtual public vehicle {protected:int SeatNum;
};
class motorcycle :public bicycle, public motorcar {public:void Setdata(int ms, int wt, int ht, int sn){MaxSpeed = ms, Weight = wt, Height = ht, SeatNum = sn;};void show() {cout << "最大速度: " << MaxSpeed << "重量: " << "Weight" << "高度: " << Height << "座位数: " << SeatNum << endl;}
};
void main()
{motorcycle mt;
mt.run();
mt.Setdata(100, 200, 130, 2);
mt.show();
mt.stop();
}

运行结果:

(5)编译成功后,把vehicle设为非虚基类,再编译一次,此时系统报错,无法编译成功,这是因为若不把vehicle设为虚基类,会出现二义性错误,程序不能成功编译。

C++语言程序设计(第四版)清华大学 郑莉 实验7实习报告相关推荐

  1. C++语言程序设计(第四版)清华大学 郑莉 实验6实习报告

    实验6 数组.指针与字符串 (实验环境:vs2019~ 全部代码已上机调试可运行喔~) 一. 实验目的 (1) 学习使用数组数据对象 (2) 学习字符串数据的组织和处理 (3) 学习标准C++库的使用 ...

  2. c++语言程序设计(第四版)郑莉链表的实现源码

    c++语言程序设计(第四版)郑莉链表的实现 程序是在GitHub上找到的,也不知道是不是教材提供的源码,原链接如下: 链接 但是我在这里面找到了一处错误,就是打印链表时不显示最后一个节点 //Link ...

  3. C++语言程序设计第四版郑莉

    C++语言程序设计第四版郑莉--学习笔记 第四章 类与对象 4.3构造函数与析构函数 例4-2 在程序主函数中,3个部分分别给出复制构造函数调用的3种情况. #include <iostream ...

  4. c 语言程序设计第四版郑莉答案,C 语言程序设计郑莉(第4版)

    <C++语言程序设计(在线教学版?第4版)/清华大学计算机系列教材,普通高等教育"十一五"规划教材>针对程序设计的初学者,以面向对象的程序设计思想为主线,以通俗易懂的方 ...

  5. 清华大学c语言程序设计第4版,清华大学出版社-图书详情-《C语言程序设计(第4版)学习辅导》...

    C语言是国内外广泛使用的计算机语言.许多高校都开设了"C语言程序设计"课程.作者于1991年编写了<C程序设计>.该书出版后,受到广大读者的欢迎,认为该书概念清晰.叙述 ...

  6. c语言程序设计第四版乌云高娃,C语言程序设计教学课件作者第3版乌云高娃学习手册C语言程序设计教学课件作者第3版乌云高娃学习手册学习手册第10章文件及其应用课件.docx...

    C语言程序设计教学课件作者第3版乌云高娃学习手册C语言程序设计教学课件作者第3版乌云高娃学习手册学习手册第10章文件及其应用课件.docx 学习手册(1):文本文件的操作学习内容文本文件的操作学习目标 ...

  7. c语言程序设计第四版乌云高娃,C语言程序设计教学课件作者第2版乌云高娃课件源程序及习题答案第4章课件.ppt...

    C语言程序设计教学课件作者第2版乌云高娃课件源程序及习题答案第4章课件.ppt 第4章循环结构的流程及应用 学习目标 ? 使用循环处理需要反复执行的操作. ? 循环结构的流程图. ? 循环与条件的综合 ...

  8. 清华大学出版社c语言程序设计第五版,清华大学出版社-图书详情-《C程序设计教程(第5版)》...

    21世纪计算机科学与技术实践型教程 编辑委员会 主任: 陈明 委员:毛国君白中英叶新铭刘淑芬刘书家 汤庸何炎祥陈永义罗四维段友祥 高维东郭禾姚琳崔武子曹元大 谢树煜焦金生韩江洪 策划编辑: 谢琛 21 ...

  9. c语言程序设计第四版十二五,C语言程序设计/普通高等教育十二五规划教材

    <C语言程序设计/普通高等教育十二五规划教材>是一本兼具实用性 和趣味性的C语言程序设计教材.全书共分12章,内 容包括:C语言程序设计快速入门.顺序结构.选择 结构.循环结构.数组与指针 ...

最新文章

  1. 最近对python颇有兴趣
  2. Numpy 从数值范围创建数组
  3. MPLS ×××-IPv4地址结构
  4. Mysql入门实战中
  5. 【解决办法】Oracle登录报错ORA-28000: the account is locked
  6. .Net IOC框架入门之三 Autofac
  7. SAP系统和微信集成的系列教程之六:如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中
  8. 精彩回放 | 玩转 VS Code 物联网开发
  9. Lifewire文档阅读笔记-如何使用IP地址找对应的MAC地址
  10. 全球金融中心最新排位:深圳重回前十,大连杭州飙升
  11. 童程童美机器人编程上海虹口校区_呼市童程童美少儿编程学习中心
  12. Linux操作Oracle(10)——plsql配置Oracle客户端方法【Oracle客户端安装、资源下载】详细教程
  13. ios定位权限plist_iOS(定位一)后台定位和前台定位权限设置
  14. 阿里飞天分布式操作系统
  15. PHP报错child 30396 said into stderr: zend_mm_heap corrupted
  16. LabVIEW formula node
  17. 点餐系统mysql设计,SpringBoot 微信点餐系统 1:数据库表设计
  18. Windows系统 修改 dns
  19. 计算机应用基础难点,计算机应用基础(本科)重、难点
  20. 常用windows XP 系统命令

热门文章

  1. SDK接口与API接口究竟有什么区别?
  2. 江西师大优秀教授计算机,江西师大软件学院怎样?
  3. Split分离解析 、 RAID磁盘阵列 、 进程管理 、 日志管理 、 systemctl控制 案例
  4. 每日学术速递3.27
  5. 黑苹果 macOS 10.10 on vmware15安装流程
  6. mq Too many publishes in progress
  7. NebuDAO:打造一站式链游服务生态产业
  8. PTA:程序猿和产品狗(c++ 友元)
  9. 怎么把手机游戏隐藏在计算机里,我把程序中的游戏隐藏了,怎么找到并恢复?...
  10. Rust开发调试环境搭建Windows