C++程序设计实验-3

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

实验名称 C++简单程序设计-3 实验日期 2018-4-2 得分  指导教师  耿学华       计软院   专业计科    年级  2016     班次  (2)  姓名    余佳奇    学号  20161326022    

一、验证性实验

1.        类:分为标准类和用户自定义类,实现信息封装的基础,对问题的抽象描述。类是一种用户定义类型。每个类包含数据成员和函数成员。类的实例称为对象。

2.        对象:class类型一旦被定义,它的实例变量(对象)就能被创建,并初始化,且能定义指针变量指向它。实例化的类就是对象。

3.        构造函数:构造函数的作用是在对象被创建时利用特定的值构造对象,将对象初始化。没有返回值,函数名和类名相同,在对象创建时被自动调用。构造函数能够重载,编译器会根据参数个数和类型来自动选择调用哪一个重载构造函数。当重载不带参数和带默认形参的构造函数时可能存在歧义,编译器无法选择哪一个为最佳匹配的函数。

4.        复制构造函数:使用已有的对象初始化一个新的对象。复制构造函数的调用:(1)当用类的一个对象去初始化该类的另一个对象时。(2)如果函数的形参是类的对象,调用函数时,进行形参和实参结合时。(3)如果函数的返回值是类的对象,函数执行完成返回调用者时。

5.        析构函数:用来完成对象被删除前的一些清理工作。在对象的生存期即将结束的时刻被自动调用。不接受任何参数。

二、实验结论

1.  习题4-11

定义并实现一个矩形类,有长、宽两个属性,由成员函数计算矩形面积。

算法思路:首先定义一个矩形类,然后定义构造函数,用于对矩形长和宽的初始化,将矩形长和宽设定为自主输入。

Code:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 class Rectangle{
 5     private:
 6         double width,length;
 7     public:
 8         Rectangle(double w,double l);    // 用户自定义的构造函数
 9         ~Rectangle();                    // 用户自定义的析构函数,函数名为~类名,没有返回值类型。 
10                                          // 析构函数用于在对象生存期结束时,被系统自动调用完成对象内存的回收及相关清理工作
11         void Area(){
12             cout<<showpoint<<"The rectangle's Area is:"<<width*length<<endl;
13             return ;
14         }
15 }; 
16 Rectangle::Rectangle(double w, double l) //当成员函数的实现写在类的外部时,要用类名::成员函数名的形式 用形参x0,y0完成数据成员x,y的初始化  
17 {
18     cout << "constructor is called." << endl;
19     width = w;  
20     length = l;
21 }
22 
23 Rectangle::~Rectangle() 
24 {
25     cout << "destructor is called." << endl;
26 } 
27 
28 int main(){
29     double w,l;
30     cout<<"Please enter the width of the rectangle: "<<endl;
31     cin>>w;
32     cout<<"Please enter the length of the rectangle: "<<endl;
33     cin>>l;
34     Rectangle S(w,l);                   // 定义Renctangle类的对象S;
35     S.Area();                           //调用Area求出矩形的面积
36     return 0;
37 }

运行结果:

2.  习题4-20

定义一个复数类Complex,使得下面的代码能够工作。

算法思路:分别设定两个构造函数用于实现复数3+5i和实数4.5的初始化。定义两个函数分别用于复数相加和显示结果。

Code:

 1 #include<iostream>
 2 using namespace std;
 3 class Complex{
 4     public: 
 5         Complex(double r,double i){                    // 自定义的默认的构造函数,函数名与类名同,没有返回值类型
 6             cout << "constructor is called." << endl;
 7             real=r;
 8             imaginary=i;
 9         }
10         Complex(double r){
11             cout << "constructor is called." << endl;
12             real=r;
13             imaginary=0;
14         }
15         Complex(Complex &c0){                          // 自定义的复制构造函数
16             cout << "copy constructor is called." << endl;
17             real=c0.real;
18             imaginary=c0.imaginary;
19         }
20         ~Complex(){                                    // 自定义的析构函数,函数名为~类名,没有返回值类型。
21             cout << "destructor is called." << endl;
22         }
23         void add(Complex &c0){                         //用于求和的函数
24             real+=c0.real;
25             imaginary+=c0.imaginary;
26         }
27         void show(){                                   //用于显示结果
28                 cout<<real<<"+"<<imaginary<<"i"<<endl;
29         }
30      private:
31         double real, imaginary;
32 };
33 int main(){
34     Complex c1(3,5);
35     Complex c2=4.5;
36     c1.add(c2);
37     c1.show();
38     return 0;
39 }

运行结果:

三、 实验总结与体会

本次实验专题时类和对象,在验证性实验和编程实验过程中,我理解了类和对象的概念,并掌握了类和对象的定义和使用。同时理解了类的构造函数、析构函数、复制构造函数的用途和编写。总的来说收获很多。

原文地址:https://www.cnblogs.com/yjqi/p/8697516.html