面向对象实验一 类的建立与应用

一、实验目的

类构成了实现 C++面向对象程序设计的基础。类是 C++封装的基本单元,它把数据和函

数封装在一起。当类的成员函数声明为保护时,外部不能访问;声明为公共时,则在任何地

方都可以访问。

通过建立类来掌握面向对象程序设计中类的封装性、数据保护等特性以及构造函数、

析构函数,掌握系统什么时候自动缺省构造函数和缺省析构函数。要求掌握声明和定义类和

成员函数的方法,掌握访问成员函数的方法,理解保护数据如何屏蔽外部访问的原理,使得对

类的封装有更好的认识。

成员函数的定义:

1. 在类中定义成员函数:在类中定义的成员函数一般规模都比较小,语句只有 1~5

句,而且特别是不允许使用 switch 语句,它们一般为内联函数,即使没有明确使

用 inline 标示。

2. 在类之后定义成员函数:对于大的成员函数,直接把代码放到类定义中使用起来

十分不方便。为了避免这种情况,C++允许在其他地方定义成员函数。

将类定义和其成员函数定义分开,是目前开发程序的通常做法。我们把类定义(头文件)

看成是类的外部接口,类的成员函数定义看成是内部实现。

二、实验内容

使用 Visual  C++6.0 建立一个复数类,并编制主程序来验证对所创建的复数类的操作

的正确性。

三、实验要求

1、有两个私有的成员 x 和 y;

2、分别有一个带参数构造函数和无参数构造函数;

3、定义一个可以显示复数的实部和虚部的成员函数。

四、思考题

1、该复数没有定义析构函数(如果使用 Visual C++ 6.0 创建类,则会自动为该类生成析

构函数),系统会怎样做?

2、如果定义该复数类的对象时不带参数,是否可以?如果不行,是何原因?

实验代码:

//sy1.h

#ifndef SY1_H_

#define SY1_H_

#include<iostream>

using namespace std;

class fushu

{

private://私有函数,只限内部函数访问即public里的函数

double shi;

double xu;

public://与外部的接口

fushu();

fushu(double s, double x);//不能带默认参数,会产生歧义或者不全带默认参数

void show();

};

#endif

//sy1.cpp

//#include<iostream>

#include"sy1.h"

//using namespace std;

fushu::fushu()

{

shi = 0.0;

xu = 0.0;

}

fushu::fushu(double s, double x) :shi(s), xu(x)//我用初始化列表,可以写在里面

{

}

void fushu::show()

{

if (xu >= 0)

cout << shi << "+" << xu << "j" << endl;

else

cout << shi << xu << "i" << endl;

}

/*假设你的工程里面有4个文件,分别是a.cpp,b.h,c.h,d.h。  

a.cpp的头部是:

#include   "b.h "  

#include   "c.h "  

b.h和c.h的头部都是:

#include   "d.h "  

而d.h里面有class   D的定义。

这样一来,

编译器编译a.cpp的时候,先根据#include   "b.h "去编译b.h这个问题,再根据b.h里面的#include   "d.h ",去编译d.h的这个文件,这样就把d.h里面的class   D编译了;

然后再根据a.cpp的第二句#include   "c.h ",去编译c.h,最终还是会找到的d.h里面的class   D,但是class   D之前已经编译过了,所以就会报重定义错误。 加上ifndef / define / endif,就可以防止这种重定义错误。

所以还是把头文件的内容都放在#ifndef和#endif中吧。

不管你的头文件会不会被多个文件引用,你都要加上这个。*/

//user.cpp

#include<iostream>

#include"sy1.h"

using namespace std;

int main()

{

double shi;

double xu;

fushu a;//测试默认构造函数

a.show();

cout << "please enter a complex number: " << endl;

cout << "please enter real part:";

cin >> shi;

cout << "please enter imaginary part:";

cin >> xu;

fushu b(shi, xu);

b.show();

return 0;

}

思考题1:该复数没有定义析构函数(如果使用 Visual C++ 6.0 创建类,则会自动为该类生成析构函数),系统会怎样做?

答:系统会自动分配一个析构函数给它。

思考题2:如果定义该复数类的对象时不带参数,是否可以?如果不行,是何原因?

答:可以,系统则自动调用无参构造函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Polices张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值