C++面向对象程序设计实验五 派生与继承
重庆理工大学C++面向对象程序设计实验
实验五 派生与继承—单重派生
5.1 实验目的
1.理解继承的含义以及声明;
2.理解共有派生、私有派生和保护派生的含义以及使用;
3.理解单派生类中构造函数和析构函数的调用顺序。
5.2 实验内容
5.2.1程序阅读
1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。
#include "iostream.h"
class CBase
{
public:
CBase(int a)
:a(a)
{
}
protected:
void print()
{
cout<<"a="<<a<<endl;
}
private:
int a;
};
class CDerive : public CBase
{
public:
void print()
{
CBase::print();
cout<<"b="<<b<<endl;
}
private:
要想学习好,努力少不了 学长只能帮你到这了
重庆理工大学C++面向对象程序设计实验
int b;
};
void main()
{
CDerive d;
d.print();
CBase b;
b.print();
}
问题一:以上程序有两大错误,试指出来,并改正之?
答:CBase类中print为保护成员对象不可直接访问。派生类中没有构造函数,加一个构造函数并对参数初始化。CDerive(int n,int a):CBase(a)
{b=n;}
2.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。
#include "iostream.h"
class CBase
{
public:
CBase(int a)
:a(a)
{
cout<<"base structure"<<endl;
}
~CBase()
{
cout<<"base destructure"<<endl;
}
void print()
{
cout<<"a="<<a<<endl;
}
protected:
int a;
};
class CDerive : public CBase
{
public:
CDerive(int a, int b,int c)
:CBase(a),b(b),c(c)
{
要想学习好,努力少不了 学长只能帮你到这了
重庆理工大学C++面向对象程序设计实验
cout<<"derive structure"<<endl;
}
~CDerive()
{
cout<<"derive destructure"<<endl;
}
void print()
{
CBase::print();
cout<<"b.a="<<b.a<<endl;
cout<<"c="<<c<<endl;
}
private:
CBase b;
int c;
};
void main()
{
CDerive d(1,2,3); //-----------------------------------------------------①
d.print();
}
问题一:以上程序的输出结果是什么,说明为什么?
答:没有输出结果,因为有错误,说明公有继承派生类不能通过对象访问基类中的保护成员,只有把基类中的a改成公有成员,才可以。
问题二:①处语句执行完后,d.b.a的值为多少?
5.2.2 程序设计
1.定义点CPoint类作为基类,在此基础上派生出直线CLine类和圆CCircle类,并要求基类和各派生类具有以下特点:
a.CLine类含有计算直线长度和斜率的成员函数;
b.CCircle类含有计算圆面积的成员函数。
1. #include "iostream.h"
#include<cmath>
#define pi 3.14159
class CPoint
要想学习好,努力少不了 学长只能帮你到这了
重庆理工大学C++面向对象程序设计实验
{
public:
CPoint(double x1=0,double y1=0)
{
x=x1;y=y1;
}
void print()
{
cout<<"点a的坐标为:("<<x<<","<<y<<")"<<endl;
}
~CPoint(){}
private:
double x,y;
};
class CLine:public CPoint
{
public:
CLine(double x1,double y1,double x2, double y2):CPoint(x1,y1)
{
cout<<"请输入点b的坐标:";
cin>>x2>>y2;x2=x2;y2=y2;
for(;x2-x1==0;)
{cout<<"对不起此斜率不存在"<<endl;
cout<<"重新输入b点坐标:";
cin>>x2>>y2;x2=x2;y2=y2;}
L=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
K=(y2-y1)/(x2-x1);cout<<"直线ab的长度:L="<<L<<'\t'<<"斜率:K="<<K<<endl; //else{
// L=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
// K=(y2-y1)/(x2-x1);cout<<"直线ab的长度:L="<<L<<'\t'<<"斜率:K="<<K<<endl;}
}
~CLine(){}
private:
double x2,y2,L,K;
};
class CCircle:public CPoint
{
public:
CCircle(double x1,double y1):CPoint(x1,y1)
{
cout<<"请输入圆的半径R:";
cin>>R;
要想学习好,努力少不了 学长只能帮你到这了
重庆理工大学C++面向对象程序设计实验
S=pi*R*R;
cout<<"位于点"<<"("<<x1<<","<<y1<<")"<<"处圆的面积S="<<S<<endl;
}
~CCircle(){}
private:double R,S;
};
void main()
{
double x1,y1,x2,y2,R;
cout<<"请输入a点x和y的坐标:";
cin>>x1>>y1;
CPoint a(x1,y1);a.print();
CLine b(x1,y1,x2,y2);
cout<<"请输入圆心坐标:";
cin>>x1>>y1;
CCircle D(x1,y1);
}
2.
#include "iostream.h"
#include<cmath>
#define pi 3.14159
class CPoint
{
public:
CPoint(double x1=0,double y1=0)
{
x=x1;y=y1;
}
void print()
{
cout<<"点a的坐标为:("<<x<<","<<y<<")"<<endl;
}
~CPoint(){}
private:
double x,y;
};
class CLine:public CPoint
{
public:
CLine(double x1,double y1,double x2, double y2):CPoint(x1,y1)
{
cout<<"请输入点b的坐标:";
要想学习好,努力少不了 学长只能帮你到这了
重庆理工大学C++面向对象程 …… 此处隐藏:1829字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [教育文库]夜场KTV服务员的岗位职责及工作流程[1]
- [教育文库]企划、网络、市场绩效考核方案
- [教育文库]学党史、知党情、强党性--“党的基本理
- [教育文库]2016年高考物理大一轮总复习(江苏专版
- [教育文库]干部廉洁自律自查自纠的报告
- [教育文库]2010年北京大学心理学系拟录取硕士研究
- [教育文库]资金时间价值练习题及答案
- [教育文库]保护环境的心得体会
- [教育文库]英语角内容:英语趣味小知识
- [教育文库]档案收集与管理工作通知
- [教育文库]劳动规章制度范本范本
- [教育文库]高考物理一轮复习课后限时作业1运动的
- [教育文库]机械工艺夹具毕业设计195推动架设计说
- [教育文库]通用技术教学比赛说课稿2
- [教育文库]2018年四年级英语下册 Module 7 Unit 2
- [教育文库]第2章 宽带IP网络的体系结构
- [教育文库]九年级化学第五单元课题3《根据化学方
- [教育文库]小学英语六年级情态动词用法归纳
- [教育文库]甲级单位编制窑井盖项目可行性报告(立
- [教育文库]2016-2021年中国城市规划行业全景调研
- 高考英语听力十大场景词汇总结
- 全省领导班子思想政治建设座谈会会议精
- 人教版新课标高一英语提优竞赛试题 下
- 江西省2014年生物中考试题
- 长沙镇食品药品安全事故应急预案
- 《金刚石、石墨和C60》片段教学设计
- 福州教育学院(王旭东)
- 基于EDA音乐播放器的设计
- 9、古诗两首《夜书所见》《九月九日忆
- 小学语文课外阅读有效策略探讨
- 贵州文化产业发展成支柱产业的问卷调查
- 膀胱类癌的诊治体会(附3例报告)
- 发动机积碳产生的原因
- Configuring Code Composer Studio for
- 学生良好的心理素质如何培养点滴谈
- 46 电沉积法制备锂离子电池用硅-锂薄膜
- 美舍雅阁公司管理中各部门职责
- 去壳剥皮的小妙招
- 六自由度运动平台的仿真研究
- Pride and Prejudice(傲慢与偏见)




