内蒙古科技大学面向对象的程序设计实验8继承一.docx
- 文档编号:23743552
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:21
- 大小:158.83KB
内蒙古科技大学面向对象的程序设计实验8继承一.docx
《内蒙古科技大学面向对象的程序设计实验8继承一.docx》由会员分享,可在线阅读,更多相关《内蒙古科技大学面向对象的程序设计实验8继承一.docx(21页珍藏版)》请在冰豆网上搜索。
内蒙古科技大学面向对象的程序设计实验8继承一
内蒙古科技大学
面向对象的程序设计
实验报告
课程名称:
面向对象的程序设计
姓名:
陈伟光
实验名称:
继承
(一)
学号:
1567159118
任课教师:
刘月峰
专业:
软件工程
指导教师:
刘月峰
班级:
15-软件一班
一、实验目的
1.理解继承的含义以及声明;
2.理解共有派生、私有派生和保护派生的含义以及使用;
3.理解单派生类中构造函数和析构函数的调用顺序。
二、实验环境
编译器:
VisualC++6.0.
操作系统:
Windows7 旗舰版
三、实验内容
2.1练习
(一):
1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。
#include"iostream.h"
classCBase
{
public:
CBase(inta)
:
a(a)
{
}
protected:
voidprint()
{
cout<<"a="< } private: inta; }; classCDerive: publicCBase { public: voidprint() { CBase: : print(); cout<<"b="< } private: intb; }; voidmain() { CDerived; d.print(); CBaseb; b.print(); } 问题一: 以上程序有两大错误,试指出来,并改正之? 2.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。 #include"iostream.h" classCBase { public: CBase(inta) : a(a) { cout<<"basestructure"< } ~CBase() { cout<<"basedestructure"< } voidprint() { cout<<"a="< } protected: inta; }; classCDerive: publicCBase { public: CDerive(inta,intb,intc) : CBase(a),b(b),c(c) { cout<<"derivestructure"< } ~CDerive() { cout<<"derivedestructure"< } voidprint() { CBase: : print(); cout<<"b.a="< cout<<"c="< } private: CBaseb; intc; }; voidmain() { CDerived(1,2,3);-----------------------------------------------------① d.print(); } 问题一: 以上程序的输出结果是什么,说明为什么? 问题二: ①处语句执行完后,d.b.a的值为多少? 2.2练习 (二): 1.定义点CPoint类作为基类,在此基础上派生出直线CLine类和圆CCircle类,并要求基类和各派生类具有以下特点: a.CLine类含有计算直线长度和斜率的成员函数; b.CCircle类含有计算圆面积的成员函数。 四、实验过程 练习1 实验题目源代码如下: 直接编译结果如下: 查看错因,首先前两句话写明,在创建CBase和CDerive对象时候,没有传递参数,实际代码中CDerive根本没有正确的构造函数,代码区中加入一段带有初始化列表的构造函数 第三句话指明基类对象b直接调用CBase类保护成员函数,属于类外调用,权限错误,此处可以将print的权限改为public 修改后的代码如下: 然后尝试编译运行: 运行成功,符合题意 练习2 实验题目提供源代码如下: 尝试编译: 错误集中在基类成员数据a上,分析代码,CDerive类对象d创建时候一共有三个参数,1传递至派生类,再调用基类构造函数,3直接传递给派生类构造函数,2传递给了派生类的中内嵌的基类成员对象,然而在公有继承下,派生类对象只能访问基类的公有数据,所以此处将a的权限改为public, 修改之后的代码如下: 尝试编译运行: 结果和代码本意相同,修改成功 练习3 根据题意,设计代码如下: 面积计算以及斜率计算分别写在了CLine类和CCircle类的构造函数中,在创建对象的时候输入x2,y2r即可算出距离和面积 试运行结果如下: 运行结果正确 五、实验总结 实验源代码: 练习 (一) #include"iostream.h" classCBase { public: CBase(inta): a(a) { } //protected: voidprint()//错误1.CBase类对象类外无法直接调用此主函数,应该改为public型 { cout<<"a="< } private: inta; }; classCDerive: publicCBase { public: CDerive(inta,intb): CBase(a),b(b)//错误2.构造函数错误,初始化列表和参数错误 {} voidprint() { CBase: : print();//保护继承下,派生类中可以访问基类的公有和保护数据 cout<<"b="< } private: intb; }; voidmain() { CDerived(0,0);//因为原题构造函数中有形参,所以创建要加上参数 d.print(); CBaseb(0); b.print(); } /* #include"iostream.h" classCBase { public: CBase(inta) : a(a) { } protected: voidprint() { cout<<"a="< } private: inta; }; classCDerive: publicCBase { public: voidprint() { CBase: : print(); cout<<"b="< } private: intb; }; voidmain() { CDerived; d.print(); CBaseb; b.print(); } */ 练习 (二) #include"iostream.h" classCBase { public: CBase(inta) : a(a) { cout<<"basestructure"< } ~CBase() {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 内蒙古 科技大学 面向 对象 程序设计 实验 继承
![提示](https://static.bdocx.com/images/bang_tan.gif)