c++实验3

1. 验证性实验部分

(1)类:在面向对象程序设计中,类构成程序模块。类是一个模板,它描述一类对象的行为和状态。

(2)对象:对象是类的一个实例

(3)构造函数:构造函数的作用是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态,且构造函数在对象被创建时将被自动调用。

(4)复制构造函数:是一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象的引用。其作用是使用一个已经存在的对象(由复制构造函数的参数指定),去初始化同类的一个新对象。

(5)  析构函数:析构函数用来完成对象被删除前的一些清理工作,提供一个在对象删除前可以释放这个对象所占有的资源的机会。

可以用以下图片说明类与对象之间的关系:

图中男孩女孩为类,而具体的每个人为该类的对象。

析构函数在目前我们的编程练习中,可能没有什么作用。但根据网上资料,在之后的学习,例如指针中,析构函数清理就是帮助回收有依赖关系的内存空间。

2. 编程实验部分

4-11

#include<iostream>
using namespace std;
class Rectangle
{
public:
    Rectangle(double l, double w);                    //自定义构造函数
    Rectangle(Rectangle &r);                        //复制构造函数
    ~Rectangle();                                    //析构函数
    double Area();                                    //计算矩形面积的函数
private:
    double length, width;
};
Rectangle::Rectangle(double l, double w)            //构造函数的实现
{
    length = l;
    width = w;
}
Rectangle::Rectangle(Rectangle &r)                    //复制构造函数实现
{
    length = r.length;
    width = r.width;
}
Rectangle::~Rectangle()                                //析构函数实现
{
    cout << "数据已清除" << endl;
}
double Rectangle::Area()                            //计算矩形面积的函数的实现
{
    return length*width;
}
int main()
{
    double length,width;
    cout << "请输入矩形的长、宽: ";
    cin >> length >> width;
    Rectangle R1(length, width);
    Rectangle R2(R1);
    cout<<"面积为:"<<R2.Area()<<endl;
    return 0;
}

4-20

#include <iostream>
using namespace std;
class complex {
public:
    complex(double r, double i);                        //自定义构造函数
    complex(double r);                                    //重载
    complex(complex &t);                                //复制构造函数
    void add(complex c2);                                //加法函数
    void show();
private:
    double real, imaginary;
};
complex::complex(double r, double i)                    //构造函数实现
{
    real = r;
    imaginary = i;
}
complex::complex(double r)                                //重载
{
    real = r;
    imaginary = 0;
}
complex::complex(complex &t)                            
{
    real = t.real;
    imaginary = t.imaginary;
}
void complex::add(complex c2)                            //加法函数实现
{
    real += c2.real;
    imaginary += c2.imaginary;
}
void complex::show()                                    //输出函数实现
{
    cout<< real << "+" << imaginary << "i" << endl;
}
int main()
{
    complex c1(3.0, 5.0);                                //数据的输入
    complex c2(4.5);
    c1.add(c2);
    c1.show();
    return 0;
}

3.实验总结与体会

  通过实验,我加深了对类、对象、构造函数、复制构造函数和析构函数的认识和了解。在上课时有些不理解的地方,通过5 个cpp文件及其中的注释,并且通过比较其运行时的区别可以直观的了解构造函数、复制构造函数和析构函数的作用。

  在实验二中,在纠结是要写一个类似“用户输入实部虚部”的简单界面,还是直接定义。最后还是选择了如上的方法。虽然答案是正确的,但总感觉有些问题。并且好像写了一个复制构造函数却没有在main函数中用到。

posted @ 2018-04-08 17:31  质壁分离  阅读(132)  评论(3编辑  收藏  举报