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函数中用到。

转载于:https://www.cnblogs.com/zhibifenli/p/8746263.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.声明一个动物基类Animal,私有整型成员变量年龄age,请定义一个派生类Dog,在其成员函数SetAge(int n)中直接给age赋值,测试下看是否会出问题?如何解决? 2.设计一个单基继承的类层次程序,用Person类派生出Student类,增加属学号index和年级level。Person类中至少有姓名name、年龄age等数据成员,以及构造函数、输出函数等,其余成员函数根据需要添加。在主函数中进行测试。 3.定义一个学生类Student和教师类Teacher,学生类有姓名name、学号index等数据成员,教师类有姓名name、工作证号workID、职称title、课程course、周学时hoursPerWeek等数据成员。再定义一个助教类TeachingAssistant,多继承于学生类和教师类,该类可以使用学生类的全部数据成员,以及教师类的课程和周学时数据成员。要求:每个类提供自定义的构造函数和析构函数,并通过同名函数ShowInfo来显示全部数据成员的值。在主函数中进行测试。 4.声明一个Person,包含姓名name和年龄age等私有数据成员以及相关的成员函数;由它派生出领导类Leader,包含职务position和部门department私有数据成员以及相关的成员函数;再由Person派生出工程师类Engineer,包含职务position和专业speciality私有数据成员以及相关的成员函数;再由Leader和Engineer类派生出主任工程师类Chairman。在主函数中测试各类对象初始化和信息输出,查看是否会出问题?如何解决?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值