C++类中怎样对数组用构造函数初始化

2024-12-01 01:27:58
推荐回答(3个)
回答1:

有两种方法,一种是使用初始化列表,一种是C++11提供的类内初始化。初始化的参数通常为列表,即数组的列表初始化,对于char数组还可以用字符串字面值作为初始化的参数。


数组通常使用列表进行初始化,如果列表元素小于数组大小,则剩下的元素默认初始化(对于函数内的内置类型,其值不确定):

int main()
{
    int a[3] = {0, 0, 0};
    int b[] = {0, 0, 0};
    int c[3] = {0} //c[0]=0,c[1]和c[2]值不确定,依赖于编译器。
    return 0;
}

在类里也可以用列表来初始化:

#include 
struct A {
        // C++11新特性,当构造函数未初始化某个元素时,初始化为类内初始值
    int a[3] = {0, 0, 0}; 
    A() = default; //C++11新特性,指出由编译器来合成默认构造函数
    A(int x, int y, int z) : a({x, y, z}) {}
};
int main() {
    A a;
    std::cout << a.a[0]; //0
    A b(1, 1, 1);
    std::cout << b.a[0]; //1
    return 0;
}

特殊地,char数组可以用字符串字面值来初始化:

struct A {
    char s[6] = "hello"; //必须预留一个'\0',因此s的大小至少为6
};

回答2:

错误的原因是你在类定义里面做得初始化,把初始化部分放在类CComputer的构造函数里就ok了。

初始化的位置错误,我说得绝对没问题,可以在类定义中声明类,但是初始化一定要放在成员函数里。

回答3:

另一个类调用他的对象 是否在另一个类声明了它或把那个类的文件包含进来?