内蒙古科技大学面向对象的程序设计实验8-继承(一)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间: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)

{

}

protected:

void print()

{

cout<<"a="<

}

private:

int a;

};

class CDerive : public CBase

{

public:

void print()

{

CBase::print();

cout<<"b="<

}

private:

int b;

};

void main()

{

CDerive d;

d.print();

CBase b;

b.print();

}

问题一:以上程序有两大错误,试指出来,并改正之?

2.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。#include "iostream.h"

class CBase

{

public:

CBase(int a)

:a(a)

{

cout<<"base structure"<

}

~CBase()

{

cout<<"base destructure"<

}

void print()

{

cout<<"a="<

}

protected:

int a;

};

class CDerive : public CBase

{

public:

CDerive(int a, int b,int c)

:CBase(a),b(b),c(c)

{

cout<<"derive structure"<

}

~CDerive()

{

cout<<"derive destructure"<

}

void print()

{

CBase::print();

cout<<"b.a="<

cout<<"c="<

}

private:

CBase b;

int c;

};

void main()

{

CDerive d(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,y2 r即可算出距离和面积

试运行结果如下:

运行结果正确

五、实验总结

实验源代码:

练习(一)

#include "iostream.h"

class CBase

{

public:

CBase(int a):a(a)

{

}

// protected:

void print() //错误1.CBase类对象类外无法直接调用此主函数,应该改为public型

{

相关文档
最新文档