南京信息工程大学实验报告
实验名称:类和对象 实验日期:2018-4-3 得分: 指导老师:耿学华 系:计软院 专业:计嵌 年级:2017级 班次:(1) 姓名:赵业康 学号:20178303035
实验结论
1.验证性实验
(1)类:在面向对象程序设计中,类构成程序模块。类是对逻辑上相关的函数与数据的封装,它是对问题的抽象描述,描述了一类事物的共同属性和行为。
(2)对象:类的对象是该类的某一特定实体,也就是实例化的类。
(3)构造函数:构造函数的作用是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态,且构造函数在对象被创建时将被自动调用。
(4)复制构造函数:是一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象的引用。其作用是使用一个已经存在的对象(由复制构造函数的参数指定),去初始化同类的一个新对象。
(5)析构函数:析构函数用来完成对象被删除前的一些清理工作,析构函数是在对象的生存期即将结束的时刻被自动调用的,析构函数不接收任何参数。
2.编程实验部分
(1)习题4-11
源代码:
#include<iostream> using namespace std; class Rectangle { public: Rectangle(float l, float w);//自定义构造函数 Rectangle(Rectangle &t); //复制构造函数 ~Rectangle(); //析构函数 float area(); //area函数计算矩形面积 private: float length, width; }; Rectangle::Rectangle(float l, float w) { //构造函数的实现 length = l; width = w; } Rectangle::Rectangle(Rectangle &t) { //复制构造函数的实现 width = t.width; length = t.length; } float Rectangle::area() { //area函数的实现 return length * width; } Rectangle::~Rectangle() { //析构函数的实现 cout << "destuctor is called." << endl; } int main(){ float length,width; cout << "请输入巨形的长和宽:"; cin >> length >> width; Rectangle rec1(length, width); Rectangle rec2(rec1); float s = rec2.area(); cout << "矩形的面积为:" << s << endl; return 0; }
运行结果:
(2)习题4-20
源代码:
#include<iostream> using namespace std; class Complex { public: Complex(double r0, double i0);//自定义构造函数(复数) Complex(double r0); //函数重载(实数) Complex(Complex &c0); //复制构造函数 void add(Complex &c0); //类成员函数 void show(); private: double real, imaginary; }; Complex::Complex(double r0, double i0) {//构造函数的实现 real = r0; imaginary = i0; } Complex::Complex(double r0) { //重载函数的实现 real = r0; } Complex::Complex(Complex &c0) { //复制构造函数的实现 real = c0.real; } void Complex::add(Complex &c0) { //add函数的实现 real = real + c0.real; //c1与c2相加,结果保存在c1中 } void Complex::show() { cout << real << "+" << imaginary << "i" << endl;//show函数的实现 } int main() { double r0, i0, r1; cout << "请输入复数的实部和虚部:"; cin >> r0 >> i0; cout << "请输入复数的实部和虚部:"; cin >> r1; Complex c1(r0, i0); Complex c2(r1); Complex c0(c2); c1.add(c0); c1.show(); }
运行结果:
实验总结与体会:
这次实验让我收获颇丰,通过实验,我加深了对类、对象、构造函数、复制构造函数和析构函数的认识和了解,但我知道自己远没有熟练掌握这些知识。看例题似乎挺简单,然而自己动手做的时候就感觉压力很大,这次虽然完成了两道实验题,但大部分内容都是仿照这书本上和课件上的例题对照着模仿出来的,即便如此仍然意外频出。尤其是第二个实验题,若非有UML图提示,我只怕要再花上多一倍的时间才能完成,不过这也让我认识了UML图的实用之处。看来为了掌握这些知识,日后还要多加练习,方能积累经验。