- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
内蒙古科技大学面向对象的程
序设计实验 8-继承(一)
内蒙古科技大学
面向对象的程序设计
实验报告
课程名称: 面向对象的程序设计 姓名: 陈伟光
实验名称: 继承(一) 学号: 1567159118
任课教师: 刘月峰 专业: 软件工程
指导教师: 刘月峰 班级: 15-软件一班
一、实验目的
1.理解继承的含义以及声明;
2 .理解共有派生、私有派生和保护派生的含义以及使用;
3 .理解单派生类中构造函数和析构函数的调用顺序。
二、实验环境
编译器:Visual C++ 6.0.
操作系统:Windows 7 旗舰版
三、实验内容
2.1 练习(一):
1.理解下面的程序,并在VC++6.0 下运行查看结果,回答程序后面的问题。
#include iostream.h
class CBase
{
public:
CBase(int a)
:a(a)
{
实验题目源代码如下:
直接编译结果如下:
查看错因,首先前两句话写明,在创建CBase 和CDerive 对象
时候,没有传递参数,实际代码中CDerive 根本没有正确的构造函
数,代码区中加入一段带有初始化列表的构造函数
第三句话指明基类对象 b 直接调用 CBase 类保护成员函数,
属于类外调用,权限错误,此处可以将 print 的权限改为 public
修改后的代码如下:
然后尝试编译运行:
运行成功,符合题意
练习 2
实验题目提供源代码如下:
尝试编译:
错误集中在基类成员数据 a 上,分析代码,CDerive 类对象 d
创建时候一共有三个参数,1 传递至派生类,再调用基类构造函
数,3 直接传递给派生类构造函数, 2 传递给了派生类的中内嵌的
基类成员对象,然而在公有继承下,派生类对象只能访问基类的公
有数据,所以此处将 a 的权限改为 public,
修改之后的代码如下:
尝试编译运行:
结果和代码本意相同,修改成功
练习 3
根据题意,设计代码如下:
面积计算以及斜率计算分别写在了 CLine 类和 CCircle 类的
构造函数中,在创建对象的时候输入 x2,y2 r 即可算出距离和面
积
试运行结果如下:
运行结果正确
五、实验总结
实验源代码:
练习(一)
#include iostream.h
class CBase
{
public:
CBase(int a):a(a)
{
}
// protected:
void print() //错误 1.CBase 类对象类外无法直接调用此主函数,应该改为 public 型
{
couta=aendl;
}
private:
int a;
};
class CDerive : public CBase
{
public:
CDerive(int a,int b):CBase(a),b(b) //错误 2.构造函数错误,初始化列表和参数错误
{}
void print()
{
CBase::print(); //保护继承下,派生类中可以访问基类的公有和保护数据
coutb=bendl;
}
private:
int b;
};
void main()
{
CDerive d(0,0); //因为原题构造函数中有形参,所以创建要加上参数
d.print();
CBase b(0);
b.print();
}
/*
#include iostream.h
class CBase
{
public:
CBase(int a)
:a(a)
{
}
protected:
void print()
{
couta=aendl;
}
private:
int a;
};
class CDerive : public CBase
{
public:
void print()
{
CBase::print();
cout
文档评论(0)