北邮小学期c++实验报告

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

面向对象程序设计与实践

c++实验总结报告

——网络工程14班饶思哲

——学号:2013211574

实验一简单C++程序设计

1.猜价格游戏

编写C++程序完成以下功能:

(1)假定有一件商品,程序用随机数指定该商品的价格(1-1000的整数);

(2)提示用户猜价格,并输入:若用户猜的价格比商品价格高或低,对用户作出相应的提示;

(3)直到猜对为止,并给出提示。

题目1-1总结:

1)本题需要随机生成整数,我开始只使用rand(),即price=rand();来生成随机整数

但这样只是一个伪随机函数,每一次重新打开程序生成的数都是一致的。

因此加入时间随机种子:srand((unsigned)time(NULL))

2)个人改进1:定义最大值最小值,在每次猜测数字时显示应猜的数字范围,作为提示。

想到这个是因为有一次猜了很多遍都没猜到,一时突然忘记猜到什么范围,然后往前翻猜过的数字和大小感觉相当麻烦,所以就添上了应猜范围,方便再一次猜数。

3)个人改进2:本来有一个判断条件判断生成的随机数是不是1~1000范围内,而后更进为

随机生成整数对1000取余得到0~999整数,再+1得到1~1000的整数。

实验二类与对象

1.矩形

编写C++程序完成以下功能:

(1)定义一个Point类,其属性包括点的坐标,提供计算两点之间距离的方法;

(2)定义一个矩形类,其属性包括左上角和右下角两个点,提供计算面积的方法;(3)创建一个矩形对象,提示用户输入矩形左上角和右下角的坐标;

(4)观察矩形对象以及Point类成员的构造函数与析构函数的调用;

(5)计算其面积,并输出。

题目2-1总结:

1) 这一题是第一次用到class 类的题目,开始并不明白为何要定义class ,然后还需要区分

public 和private 。而后来去图书馆借了书看到c ++最大特色就是可以封装,定义私有属性和公有函数,以确保有些函数和参数不会被轻易访问到,降低错误率。

2)class类在最起初定义时总是在class Rectangle那一行报错,经查书发现class定义最后一

个大括号后有分号,开始并没有加上。

3)起初在调用class中函数时用c调用的方式,没有跟面向的对象结合,导致编译出错,而

后从distance()改为p.distance()就正确了。

4)计算两点距离和面积运用开方和绝对值函数,前面若没有加头文件math.h则会报错。

5)输入左上角右下角坐标时,若输入不当,可能会出现面积为负值的情况,所以加上绝对

值函数保证面积非负。

6)起初不知道构造函数和析构函数的定义和用法,经翻阅书籍和运行程序得知构造函数在

创建对象时调用,可以有多个。而析构函数则在释放对象时调用,一般每一个class中都只有一个默认析构函数。且构造函数与类名称一致,析构函数则在类名称前加~。

2.友元

编写C++程序完成以下功能:

(1)定义一个Boat和Car两个类,他们都具有私用属性——重量;

(2)编写一个函数,计算两者的重量和。double TotalWeight(Boat& b, Car& c);

题目2-3总结:

1)友元函数:在两个对象中都使用到时,可以使用友元函数,并在类外单独定义。

友元函数是允许在类外访问类中的任何成员的。开始在类外单独定义时跟类的成员函数单独定义混淆,写成了double Boat::TotalWeight(),导致编译错误,而后发现友元函数直接用函数名和函数返回值类型定义即可,不需要加上class类的名称。

2)起初定义完class Boat和class Car后发现编译错误,在友元函数的声明那一行出错,而

后发现在这行之前没有定义Car类,于是将其在最开头声明出来,通过。

3)起初并没有加上boat和car类的构造函数和析构函数,可是经上网查阅,默认构造函数

和析构函数可以系统自动生成,但析构函数只能删除成员指针,并不能释放指针指向的空间,所以若没有申请动态内存,析构函数可不写出,若申请,则需自行在析构函数中delete。

实验三数组与指针

1.矩阵(一)

编写C++程序完成以下功能:

(1)假定矩阵大小为4×5(整型数组表示);

(2)定义矩阵初始化函数,可以从cin中输入矩阵元素;

(3)定义矩阵输出函数,将矩阵格式化输出到cout;

(4)定义矩阵相加的函数,实现两个矩阵相加的功能,结果保存在另一个矩阵中;

(5)定义矩阵相减的函数,实现两个矩阵相减的功能,结果保存在另一个矩阵中;

(6)定义三个矩阵:A1、A2、A3;

(7)初始化A1、A2;

(8)计算并输出:A3 = A1加A2,A3 = A1减A2。

题目3-1总结:

1)起初在矩阵相加相减的赋值中所用语句为:m.matrix[i][j]=a.matrix[i][j]+b.matrix[i][j]

但是运行程序发现m矩阵所有元素都是0。经单步调试,发现并没有赋值成功。经查阅书籍,了解到this指针是指向类的对象的地址,便改用this->matrix[i][j]作为赋值对象,最后程序正确。

2)个人改进:将行数列数在文件开头用define定义,可以随时更改。

3)经多次调试后,程序运行结果正确,但矩阵看起来非常混乱,因为并没有行列对齐,于

是在打印矩阵中每列直接用table空格隔开,保证美观。

2.矩阵(二)

编写C++程序完成以下功能:

(1)假定矩阵大小为4×5(整型);

(2)矩阵空间采用new动态申请,保存在指针中;

(3)定义矩阵初始化函数,可以从cin中输入矩阵元素;

(4)定义矩阵输出函数,将矩阵格式化输出到cout;

(5)定义矩阵相加的函数,实现两个矩阵相加的功能,结果保存在另一个矩阵中;

(6)定义矩阵相减的函数,实现两个矩阵相减的功能,结果保存在另一个矩阵中;

(7)动态申请三个矩阵:A1、A2、A3;

(8)初始化A1、A2;

(9)计算并输出A3 = A1加A2,A3 = A1减A2;

(10)释放矩阵空间。

题目3-2总结:

1)与3-1题目的区别在int main中用new函数动态申请内存,然后析构函数需要释放申请

的空间而不只是自动删除指向空间的指针。析构函数如图。

相关文档
最新文档