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

上传人:b****5 文档编号:14760020 上传时间:2023-06-27 格式:DOCX 页数:21 大小:158.83KB
下载 相关 举报
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第1页
第1页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第2页
第2页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第3页
第3页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第4页
第4页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第5页
第5页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第6页
第6页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第7页
第7页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第8页
第8页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第9页
第9页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第10页
第10页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第11页
第11页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第12页
第12页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第13页
第13页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第14页
第14页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第15页
第15页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第16页
第16页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第17页
第17页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第18页
第18页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第19页
第19页 / 共21页
内蒙古科技大学面向对象的程序设计实验 继承一.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《内蒙古科技大学面向对象的程序设计实验 继承一.docx》由会员分享,可在线阅读,更多相关《内蒙古科技大学面向对象的程序设计实验 继承一.docx(21页珍藏版)》请在冰点文库上搜索。

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

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

内蒙古科技大学

面向对象的程序设计

实验报告

 

 

课程名称:

面向对象的程序设计

姓名:

陈伟光

实验名称:

继承

(一)

学号:

1567159118

任课教师:

刘月峰

专业:

软件工程

指导教师:

刘月峰

班级:

15-软件一班

 

 

一、实验目的

1.理解继承的含义以及声明;

2.理解共有派生、私有派生和保护派生的含义以及使用;

3.理解单派生类中构造函数和析构函数的调用顺序。

二、实验环境

编译器:

VisualC++6.0.

操作系统:

Windows7 旗舰版

 

三、实验内容

2.1练习

(一):

1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

#include"iostream.h"

classCBase

{

public:

CBase(inta)

 :

a(a)

{

}

protected:

voidprint()

{

 cout<<"a="<

}

private:

inta;

};

classCDerive:

publicCBase

{

public:

voidprint()

{

 CBase:

:

print();

 cout<<"b="<

}

private:

intb;

};

voidmain()

{

CDerived;

d.print();

CBaseb;

b.print();

}

问题一:

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

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

#include"iostream.h"

classCBase

{

public:

CBase(inta)

 :

a(a)

{

 cout<<"basestructure"<

}

~CBase()

{

 cout<<"basedestructure"<

}

voidprint()

{

 cout<<"a="<

}

protected:

inta;

};

classCDerive:

publicCBase

{

public:

CDerive(inta,intb,intc)

 :

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

{

 cout<<"derivestructure"<

}

~CDerive()

{

 cout<<"derivedestructure"<

}

voidprint()

{

 CBase:

:

print();

 cout<<"b.a="<

 cout<<"c="<

}

private:

CBaseb;

intc;

};

voidmain()

{

CDerived(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,y2r即可算出距离和面积

试运行结果如下:

运行结果正确 

五、实验总结

实验源代码:

练习

(一)

 #include"iostream.h"

classCBase

{

public:

CBase(inta):

a(a)

{

}

//protected:

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

{

cout<<"a="<

}

private:

inta;

};

classCDerive:

publicCBase

{

public:

CDerive(inta,intb):

CBase(a),b(b)//错误2.构造函数错误,初始化列表和参数错误

{}

voidprint()

{

CBase:

:

print();//保护继承下,派生类中可以访问基类的公有和保护数据

cout<<"b="<

}

private:

intb;

};

voidmain()

{

CDerived(0,0);//因为原题构造函数中有形参,所以创建要加上参数

d.print();

CBaseb(0);

b.print();

}

 

 

 

/*

#include"iostream.h"

classCBase

{

public:

CBase(inta)

:

a(a)

{

}

protected:

voidprint()

{

cout<<"a="<

}

private:

inta;

};

classCDerive:

publicCBase

{

public:

voidprint()

{

CBase:

:

print();

cout<<"b="<

}

private:

intb;

};

voidmain()

{

CDerived;

d.print();

CBaseb;

b.print();

}

*/

 

练习

(二)

 

 

#include"iostream.h"

classCBase

{

public:

CBase(inta)

:

a(a)

{

cout<<"basestructure"<

}

~CBase()

{

cout<<"basedestructure"<

}

voidprint()

{

cout<<"a="<

}

public:

inta;

};

classCDerive:

publicCBase

{

public:

CDerive(inta,intb,intc)

:

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

{

cout<<"derivestructure"<

}

~CDerive()

{

cout<<"derivedestructure"<

}

voidprint()

{

CBase:

:

print();

cout<<"b.a="<

cout<<"c="<

}

private:

CBaseb;

intc;

};

voidmain()

{

CDerived(1,2,3);//-----------------------------------------------------①

d.print();

}

 

 

/*

1.没有任何输出结果,因为程序无法通过编译

2.d.b.a的值为2,因为构造函数实参的第二个元素2,传递给CDerive类的子对象b,b.a被初始化为2

*/

 

 

/*

#include"iostream.h"

classCBase

{

public:

CBase(inta)

:

a(a)

{

cout<<"basestructure"<

}

~CBase()

{

cout<<"basedestructure"<

}

voidprint()

{

cout<<"a="<

}

protected:

inta;

};

classCDerive:

publicCBase

{

public:

CDerive(inta,intb,intc)

:

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

{

cout<<"derivestructure"<

}

~CDerive()

{

cout<<"derivedestructure"<

}

voidprint()

{

CBase:

:

print();

cout<<"b.a="<

cout<<"c="<

}

private:

CBaseb;

intc;

};

voidmain()

{

CDerived(1,2,3);-----------------------------------------------------①

d.print();

}

*/

 

 

 

练习(三)

 #include

#include

classCPoint

{

private:

floatx,y;

public:

CPoint(floatx1,floaty1):

x(x1),y(y1)

{

cout<<"--------CPoint基类构造函数已调用---------"<

}

voiddisplay()

{

cout<<"x="<

:

x<<""<<"y="<

:

y<

}

};

classCLine:

publicCPoint

{

private:

doublek;

doublel;

public:

CLine(floatx1,floaty1):

CPoint(x1,y1)

{

cout<<"--------CLine派生类构造函数已调用--------"<

floatx2,y2;

cout<<"Pleaseinputx2,y2:

"<

cin>>x2>>y2;

l=sqrt((x1-x2)*(x1-x2)+(y2-y1)*(y2-y1));

cout<<"l:

"<

if(y2-y1!

=0)

{

k=(y2-y1)/(x2-x1);

cout<<"k="<

}

else

cout<<"分母为0,k不存在"<

}

};

classCCircle:

publicCPoint

{

private:

doubler;

public:

CCircle(floatx1,floaty1):

CPoint(x1,y1)

{

cout<<"--------CCircle派生类构造函数已调用------"<

cout<<"pleaseinputr:

"<

cin>>r;

cout<<"S="<<3.14159*r*r<

}

};

voidmain()

{

floatx1,y1;

cout<<"Pleaseinputx1,y1:

"<

cin>>x1>>y1;

CPointCP(x1,y1);

CP.display();

CLineCL(x1,y1);

CCircleCC(x1,y1);

}

 

六、参考文献

参考的资料:

C++面向对象程序设计

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2