以类 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标准下才有的,但不太确定。
本文详细解析了C++中在栈和堆上创建类对象的方法,包括单个和多个对象的初始化过程,以及构造函数如何接收参数。适用于C++初学者和进阶者,加深对C++对象内存布局的理解。

被折叠的 条评论
为什么被折叠?



