C++-类对象成员&&对象数组

类对象成员

#include 
using namespace std;

class stuid {
    int id;
    public:
        stuid(int i = 0) {
            //id = i;
            cout << "in stuid : " << i << endl;
        }
        stuid() {
            cout << "in here" << endl;
        } 
};

class stu {
    stuid id;
    public:
        stu(int i) {
            cout << "in stu : " << i << endl;
        }
};

int main () {
    stu s(1);

    return 0;
}

1、只有当对象成员所在的类有无参构造函数时,编译器才会以隐式初始化列表的方式对对象成员进行初始化。当一个类没有任何构造函数时,C++会产生一个默认无参构造函数;一旦定义了任何构造函数,C++就不会产生无参构造函数了,必须显示定义无参构造函数,或提供缺省参数的构造函数。

若stuid中没有无参构造函数,同时去掉缺省参数,即stuid( int i),这样编译器不会生成默认无参构造函数,因此无法完成初始化,会造成编译错误。
另外同时有缺省构造函数和无参构造函数时,编译器会不知道调用哪个,造成错误。

2、当类具有对象成员时,应该采用初始化列表的方式对它进行初始化。

3、对象成员的构造次序与它们在类中的声明次序相同,与它们在构造函数初始化列表中的次序无关。

对象数组

1、没有定义任何构造函数的类可以定义对象数组,因为编译器会自动生成一个默认无参函数;如果一个类只有需要参数的构造函数,就不能定义对象数组。

2、如果一个类同时具有无参构造函数和全部参数都有缺省值的构造函数,也可以定义对象数组。无参构造函数在定义对象数组时具有优先权,但是在定义无参对象时,会产生二义性。

你可能感兴趣的:(C++__学习之路,类对象成员)