南京信息工程大学实验报告
实验名称 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 }
运行结果:
三、 实验总结与体会
本次实验专题时类和对象,在验证性实验和编程实验过程中,我理解了类和对象的概念,并掌握了类和对象的定义和使用。同时理解了类的构造函数、析构函数、复制构造函数的用途和编写。总的来说收获很多。