WHCSRL 技术网

C++面向对象程序设计(用通俗易懂的方式理解它)

第三章 析构函数

第一节 对象数组

第二节 对象的赋值与复制

第三节 析构函数

第一节 对象数组

  1. 对象数组指的是每一个数组元素都是对象的一个数组。
  1. /*<类名><数组名>[<对象的个数>];*/
  2. Student stud[30];
  3. /*定义了stud数组,其中包含30个元素*/

        注意:在建立数组时 ,需要调用构造函数。有几个构造函数就需要调用几次构造函数。

        可以在定义数组时对其提供实参以实现初始化。

  • 当构造函数只有一个参数时,在定义数组时可以在等号后面的花括号里提供实参。
    Student stud[2]={90,95};

    将两个实参分别传递给两个数组元素的构造函数。

  • 构造函数有多个参数时,在花括号中分别写出构造函数名并在括号内指定实参。
  1. Student stud[3]={ //定义对象数组
  2. student (100,小王), //调用第一个元素的构造函数,并向它提供两个实参
  3. student (101,小红), //调用第二个元素的构造函数,并向他提供两个实参
  4. student (102,小李), //调用第三个元素的构造函数,并向他提供两个实参
  5. }
  • 编译系统只为每个对象元素的构造函数传递一个实参,所以在其定义数组时提供的实参个数不能超过数组元素个数。

第二节 对象的赋值与复制

  1. 对象的赋值:当一个类定义了两个或多个对象时,这些同类的对象之间可以相互赋值,即一个对象的值可以赋给另一个同类的对象。
    对象名 1=对象名 2;
  • 代码举例:
  1. #include<iostream>
  2. using namespace std;
  3. class Box
  4. {
  5. public:
  6. Box(int l=10,int w=15,int h=20):length(l),width(w),height(h){} //声明有默认参数的构造函数,用参数初始化对数据成员初始化
  7. int volume();
  8. private:
  9. int length;
  10. int width;
  11. int height;
  12. };
  13. int Box::volume()
  14. {
  15. return(length*width*height);
  16. }
  17. int main()
  18. {
  19. Box box1(10,11,12),box2;
  20. cout<<"The volume of box1 is "<<box1.volume()<<endl;
  21. box2=box1;
  22. cout<<"The volume of box2 is "<<box2.volume()<<endl;
  23. return 0;
  24. }

        3.对象的复制 

        对象的复制就是用一个已有的对象快速地复制出多个完全相同的对象。

形式1:

类名 对象2(对象1);

形式2:

类名 对象名 1=对象名 2;

注意:对象的复制在建立对象时需要调用复制构造函数,它只有一个参数,这个参数只能是本类的对象,不可以是其他类的对象,而且采用对象的引用形式。复制构造函数的作用就是将实参对象的各成员值一一赋给新的对象中对应的成员。

  1. Box::Box(const Box &b)
  2. {
  3. height=b.height;
  4. width=b.width;
  5. length=b.length;
  6. }

第三节 析构函数

  1. 析构函数也是类的成员函数,它的名字是在类名前加字符“~”。析构函数没有参数和返回值,并且不能被重载,所以一个类中只能定义一个析构函数并且应为public。
  2. 当一个类的对象运行失效时,就要调用该对象所属类的析构函数。
  3. 析构函数的作用是释放一个对象占用的内存。
  4. 用new运算符动态地创建一个对象,当用delete运算符释放它时,自动调用析构函数。
推荐阅读