以类 classname 为例
class classname
{
int a;
public:
classname(int val)
{
cout<<val<<endl;
};
};
int main()
{
classname s1(5); //1
classname s2[5]{1,2,3,4,5}; //2
classname* s3 = new classname(5); //3
classname* s4 = new classname[5]{1,2,3,4,5}; //4
}
1、在栈上定义单个类对象: 只需在定义的类对象后方加 “(数据)” ,如 1、classname s1(5);其中 5 会传给构造函数classname(int val) 作为实参。
2、在栈上定义多个类对象: 如 2、classname s2[5]{1,2,3,4,5};其中 {1,2,3,4,5} 会分别传给s2[0]、s2[1]、… 、s2[4]的构造函数classname(int val) 作为实参。
3、在堆上定义单个类对象: 如 3、classname* s3 = new classname (5);其中 5 会传给构造函数classname(int val) 作为实参。
4、在堆上定义多个类对象: 如 4、classname* s4 = new classname[5] {1,2,3,4,5};其中 {1,2,3,4,5} 会分别传给s4[0]、s4[1]、… 、s4[4]的构造函数classname(int val) 作为实参。
PS:按运行时的提示信息来看,上述2和4可能是C++11标准下才有的,但不太确定。