65,210
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
class test
{
private:
int a[3];
public:
test(int x,int y,int z):a[0](x),a[1](y),a[2](z)
{
}
};
void main()
{
test a(1,2,3);
}
// 编译后是错误的,但是把构造函数改成赋值形式,就好了 ,why?
test(int x,int y,int z)
{
a[0]=x;
a[1]=y;
a[2]=z;
}
#include<iostream>
using namespace std;
class test
{
private:
int a;
public:
test(int x):a(x)
{
}
void printA()
{
cout << a << endl;
}
};
int main()
{
test A(4);
A.printA();
return 0;
}
构造函数构造的过程是
类成员变量-> 才是构造函数
所以你之前的写法 实际上x,y,z 在初始化的时候还知道 所以编译不会通过。原因就是 a[] 的初始化在x,y,z之前
private:
int a[3];
public:
test(int x,int y,int z):a[0](x),a[1](y),a[2](z)
{
}
test(int x,int y,int z)
{
a[0]=x;
a[1]=y;
a[2]=z;
}
lz应该清楚:
内置和复合类型的成员,比如指针和数组,只对定义在全局作用域中的对象才初始化,当对象定义在局部作用域中时,内置或复合类型的成员不进行初始化@!
数组是没有默认构造函数的!