实验3

                                                                                                      南京信息工程大学实验报告

实验名称:类和对象   实验日期: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图的实用之处。看来为了掌握这些知识,日后还要多加练习,方能积累经验。

posted @ 2018-04-06 12:57  南海飞鸿  阅读(152)  评论(7编辑  收藏  举报