对象的数组,和声明一个普通的结构数组并没有什么区别。
在默认情况下,单纯的声明一个对象数组(未显式的调用构造函数时),那么将调用默认构造函数为对象数组的每个成员进行赋值(具体赋值情况需要根据默认构造函数而定)。
如代码:
#include<iostream>
#include<string>
class man
{
private:
std::string name;
int a;
public:
man() { name = "no name";a = 0; }
man(const char* na, int b) { name = na;a = b; }
void show()
{
std::cout << name << ": " << a << std::endl;
}
};
int main()
{
man a[2]; //第一种声明方法,使用默认构造函数
a[0].show();
man b[2] = //第二种声明方法,使用构造函数的重载函数
{
man{ "aa",1 }, //可以只声明一个,也可以声明一个里面的一个或几个成员(但前提是默认构造函数提供了默认参数)
man{ "bb", 2 } //这里就像单独声明一个对象一样,多个对象之间用逗号隔开
};
b[0].show();
const int p = 2;
man c[p] = //也可以同时使用不同的构造函数
{
man(), //这里使用默认构造函数
man("xx",5) //这里使用另一个构造函数
};
c[0].show();
system("pause");
return 0;
}
总结:
①三种声明方法:分别是:使用默认构造函数、使用构造函数并赋初值、二者混用。具体见代码。
②其他使用方法和声明、初始化结构数组并没有什么不用。