CPP学习之——在数组对象中初始化成员变量(14.23)

一 概述

上一节在循环语句里对每一个数组对象的成员变量进行赋值,另外我们也可以直接在声明数组对象的时候初始化它的成员变量,如:

1
area one[4]={area(10,10),area(13,34),area(13,34),area(13,34)};

二 数组初始说明

  • 赋值符=的左边是声明的数组对象名以及长度,右边是初始化的变量。与数组长度相符,也是初始化了四个对象的成员变量,每个成员变量用逗号隔开。

  • 细心的读者会发现每个成员变量前面都有个area。它的作用是调用类中的构造函数来初始化成员变量,由于系统默认的构造函数只有一个默认参数,不能创建带有两个参数的数组对象,因此我们要在类中再声明一个构造函数

    1
    area(int l,int w){length=l;width=w;}
  • 该行语句声明了一个带有两个参数的构造函数,并将这两个参数的值赋给length(长)和width(宽)

  • 我们用计算面积的小程序来演示一下如何在数组对象中初始化成员变量

三 示例演示及结果输出

3.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
using namespace std;
class area
{
private:
int length,width;
public:
area(int l,int w){length=l,width=w;cout<<"调用构造函数设置长和宽的值,"<<"长:"<<length<<"宽:"<<width<<endl;}
~area(){cout<<"调用析构函数释放内存,"<<"长:"<<length<<"宽:"<<width<<endl;}
void set(int l,int w){length=l;width=w;}
int get(){return length*width;}
};
using namespace std;
int main()
{
area one[4]={area(10,10),area(13,34),area(20,30),area(40,40)};
cout<<one[0].get()<<endl;
one[0].set(30,40);
cout<<one[0].get()<<endl;
cout<<one[1].get()<<endl;
cout<<one[2].get()<<endl;
cout<<one[3].get()<<endl;
return 0;
}

3.2 输出结果

1
2
3
4
5
6
7
8
9
10
11
12
13
调用构造函数设置长和宽的值,长:10宽:10
调用构造函数设置长和宽的值,长:13宽:34
调用构造函数设置长和宽的值,长:20宽:30
调用构造函数设置长和宽的值,长:40宽:40
100
1200
442
600
1600
调用析构函数释放内存,长:40宽:40
调用析构函数释放内存,长:20宽:30
调用析构函数释放内存,长:13宽:34
调用析构函数释放内存,长:30宽:40

四 总结

类对象数组的初始化与默认构造函数的关系:

  • 在前面已经说过,不带参数或者所有参数都有默认值的构造函数叫做默认构造函数。如果类中没有默认函数,编辑器会自动提供一个什么都不做的公共默认构造函数。而这个默认构造函数对于我们这个带有两个参数的类型数组对象的初始化毫无作用,我们需要重新声明一个带有两个参数的构造函数,并且在声明的时候,我们要记住:如果你创建了一个构造函数,那么编译器就不会提供默认构造函数