面向对象程序设计实验三报告
更新时间:2023-09-30 02:20:02 阅读量: 综合文库 文档下载
实验三 继承、多态和虚函数
班级 :13电科2 学号 :Xb13640220 姓名:饶君燕
一、实验目的:
(1) 了解面向对象程序设计中继承性、多态性的概念;
(2) 掌握单继承、多重继承中基类成员访问属性的变化规律及访问方法; (3) 掌握类族中构造函数和析构函数的定义方法及调用顺序; (4) 掌握虚函数的定义和使用方法;
二、实验任务:
1. 分别采用公有继承、私有继承、保护继承完成类的设计。 基类如下:
class Student {public:
l;} void get_value()
{cin>>num>>name>>sex;} void display( )
{cout<<\ cout<<\ cout<<\ private : int num; string name; char sex; };
通过继承Student类,完成派生类Student1的设计(提示:应增加成员函数void get_value_1()及void display_1();数据成员 int age及char addr[30]),并写出派生类的实现和演示程序。在程序中应包括接受输入数据的函数。当程序运行时,输入num,name,sex,age,addr的值,程序应能输出以上5个数据的值。
2. 对有继承关系的程序结构进行分析。 class A //A为基类 {public: void f1( ); int i; protected:
void f2(); int j; private: int k; };
class B: public A //B为A的公用派生类 {public: void f3( ); protected: int m; private: int n; };
class C: public B //C为B的公用派生类 {public: void f4(); private: int p; };
int main()
{A a1; //a1是基类A的对象 B b1; //b1是派生类B的对象 C c1; //c1是派生类C的对象 return 0; }
问题:
(1) 在main函数中能否用通过派生类B的对象b1来引用从基类A继承来的
成员i,j,k?
(2) 派生类B中的成员函数能否调用基类A中的成员函数f1、f2? (3) 派生类B中的成员函数能否引用基类A中的i,j,k? (4) 能否在main函数中通过C类对象c1引用基类A的成员i,j,k和类B的
成员m,n?
(5) 能否在main函数中用C类对象c1以c1.f1(),c1.f2(),c1.f3(),c1.f4()的形式调
用f1(),f2(),f3(),f4()?
(6) 派生类C的成员函数f4能否调用基类A的成员函数f1,f2及B类中的f3?
3.继承关系下,构造函数的调用顺序。 #include
public:
A(){a=0;b=0;} A(int i){a=i;b=0;} A(int i,int j){a=i;b=j;}
void display(){cout<<\ private: int a; int b; };
class B : public A {
public: B(){c=0;}
B(int i):A(i){c=0;}
B(int i,int j):A(i,j){c=0;}
B(int i,int j,int k):A(i,j){c=k;} void display1() {display();
cout<<\ }
private: int c; };
int main() { B b1; B b2(1); B b3(1,3); B b4(1,3,5); b1.display1(); b2.display1(); b3.display1(); b4.display1(); return 0; }
问题:
(1) 阅读上述程序,写出运行时的输出结果;上机运行验证结果的正确性。 (2) 对程序结果进行分析,重点要指出构造函数的调用过程 (3) 为上述A、B类添加析构函数,并分析析构函数在继承关系下的调用顺序。
4.参照教材例6.1,定义Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。写一个虚函数用于输出类族中各类的名字。分析如果该函数不是虚函数,输出又将是怎样?为什么?
三、实验结果
1、程序:
#include
void get_value_1()
{get_value(); cin>>age>>addr;
2、问题解答: (1)在main函数中能否用通过派生类B的对象b1来引用从基类A继承来的成员i,j,k?
答:派生类B是公有继承,能访问基类A公有数据成员i,基类A保护数据成员j,无法访问基类A的私有数据成员k。
(2)派生类B中的成员函数能否调用基类A中的成员函数f1、f2?
答:能,派生类B是公有继承,能访问基类A公有成员函数f1,基类A保护成员函数f2。
(3)派生类B中的成员函数能否引用基类A中的i,j,k?
答:派生类B是公有继承,能引用基类A公有数据成员i,基类A保护数据 ,成员j,无法引用基类A的私有数据成员k。
(4)能否在main函数中通过C类对象c1引用基类A的成员i,j,k和类B的成员m,n?
答:派生类C是公有继承,能访问基类A公有数据成员i,基类A保护数据成员j,无法访问基类A的私有数据成员k,能访问B类公有数据成员m,无
法访问B类的私有数据成员n。
(5)能否在main函数中用C类对象c1以c1.f1(),c1.f2(),c1.f3(),c1.f4()的形式调用f1(),f2(),f3(),f4()?
答:可以调用,派生类C是公有继承,f1是基类A公有成员函数,f2是基类A保护成员函数,f3是B类公有成员函数,f4是C类公有成员函数。 (6)派生类C的成员函数f4能否调用基类A的成员函数f1,f2及B类中的f3?
答:可以调用,派生类C是公有继承,f1是基类A公有成员函数,f2是基类A保护成员函数,f3是B类公有成员函数。
3、问题解答:
(1) 阅读上述程序,写出运行时的输出结果;上机运行验证结果的正确性。
(2) 对程序结果进行分析,重点要指出构造函数的调用过程
先祖先后自己 (1、先调用基类构造函数 2、再执行派生类构造函数本身) A(){a=0;b=0;} B(){c=0;} B b1; A(int i){a=i;b=0;} B(int i):A(i){c=0;} B b2(1); A(int i,int j){a=i;b=j;} B(int i,int j):A(i,j){c=0;} B b3(1,3);
B(int i,int j,int k):A(i,j){c=k;} B b4(1,3,5);
(3)为上述A、B类添加析构函数,并分析析构函数在继承关系下的调用顺序。 答:添加析构函数的代码: #include
正在阅读:
面向对象程序设计实验三报告09-30
煤矿工人入党申请书范文201709-08
第一二章 纤维的结构及主要化学性质纺织05-28
话题作文拟题指导05-12
记忆深刻的一件事作文600字06-23
高级英语(张汉熙)资料03-19
湖北省2016届高三历史二轮复习试题分类汇编(历史上的重大改革) Word版含答案11-02
海明威04-24
工厂员工规章制度范本08-14
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 程序设计
- 面向
- 对象
- 实验
- 报告
- 厌氧菌培养驯化
- 文书基础部分
- 工程度汛方案、措施
- 初中迎国庆诗文朗诵会主持词
- 吉林省汽车零部件行业企业名录2017年1766家
- 2016年5月17日7号炉受热面检修三措两案 - 图文
- 重大传染病历史
- 汽车检测技术
- 全国区级联考浙江省宁波市江北区2017-2018学年八年级上学期期末考试语文试题(原卷版)
- 西北农林科技大学10级计算机接口技术试题A
- 力控关系数据库帮助文档
- 水工建筑物复习思考题(七章全)2012(2)
- 工控机试题
- 飞检控制方案 3 - 图文
- 社会学有用书目 - 图文
- 卫星遥感应用现状及商业化前景
- 2019-2020年高二政治 文化生活 第六课 我们的中华文化导学案
- 上海市各区渣土外运规定
- 重点名校高考语文备考--高考常见成语379例(精校完美打印版)
- 市场调查与预测答案