像其他数据类型一样,对象也可以放在数组中。下面是示例程序:
[C++] 纯文本查看 复制代码 #include <iostream>
using namespace std;
enum resolution {low, medium, high};
class display {
int width;
int height;
resolution res;
public:
void set_dim(int w, int h) {width = w; height = h;} //设置分辨率
void get_dim(int &w, int &h) {w = width; h = height;}
void set_res(resolution r) {res = r;}
resolution get_res() {return res;}
};
char names[3][7] = {
"low",
"medium",
"high",
};
int main()
{
display display_mode[3]; //display类对象数组
int i, w, h;
display_mode[0].set_res(low);
display_mode[0].set_dim(640, 480);
display_mode[1].set_res(medium);
display_mode[1].set_dim(800, 600);
display_mode[2].set_res(high);
display_mode[2].set_dim(1204, 768);
cout << "Available display modes:\n\n";
for (i = 0; i < 3; i++) {
cout << names[display_mode[i].get_res()] << ": ";
display_mode[i].get_dim(w, h);
cout << w << " x " << h << "\n";
}
return 0;
}
上面程序将 3 个 display 类的对象存放在对象数组中,并在对象的成员变量中分别存入不同的屏幕分辨率值,最后读取出来。
如果类中包含了参数化的构造函数,那么可以对一个对象数组进行初始化。例如下面代码:
[C++] 纯文本查看 复制代码 #include <iostream>
using namespace std;
class sample {
int a;
public:
sample(int n) { a = n; }
int get_a() { return a; }
};
int main()
{
sample samparray[4] = {1, 8, -3, 6};
int i;
for (i = 0; i < 4; i++)
cout << samparray[i].get_a() << ' ';
cout << "\n";
return 0;
}
运行输出:从输出中可以看到,1,8,-3,6 这几个数分别传递给了 sample 的构造函数。上面初始化列表中的形式是下面形式的一种缩写:
sample samparray[4] = {sample(1), sample(8), sample(-3), sample(6) };
上面的缩写形式初始化只适用于构造函数仅带有一个参数的数组。如果数组对象中的构造函数不知带有一个参数时,必须使用完整的形式来进行初始化,如下代码所示:
[C++] 纯文本查看 复制代码 #include <iostream>
using namespace std;
class samp {
int a, b;
public:
samp(int n, int m) { a = n; b = m; }
int get_a() { return a; }
int get_b() { return b; }
};
int main()
{
samp sampArray[4][2] = {
samp(1,2), samp(3,4),
samp(5,6), samp(7,8),
samp(9,10), samp(11,12),
samp(13,14), samp(15,16)
};
int i;
for (i = 0; i < 4; i++) {
cout << sampArray[i][0].get_a() << ' ';
cout << sampArray[i][0].get_b() << "\n";
cout << sampArray[i][1].get_a() << ' ';
cout << sampArray[i][1].get_b() << "\n";
}
cout << "\n";
return 0;
}
运行输出:$ ./initarray2
1 2
3 4
5 6
7 8
9 10
11 12
13 14
15 16 上面程序中,类 samp 的构造函数带有两个参数,所以在 main(0 中通过直接调用 samp() 的构造函数来对数组 sampArray 进行声明和初始化,此时不能采用简略的初始化方式。 |