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

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

内蒙古科技大学

面向对象的程序设计

实验报告

一、实验目的

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型

{

相关文档
最新文档