//构造函数的对象初始化列表 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; class PointA{ public: PointA(int _x){ x = _x; } void GetX(){ printf("PointA的成员变量%d\n",x); } private: int x; }; class PointB{ public: //构造函数的初始化列表 PointB(int _a, int _b) :pa(_b), pa3(_b), pa2(_b) { //备注:先初始化 pa,其次pa2,再次pa3,与对象初始化列表没有关系,只与成员变量的定于顺序有关系 //PointB的对象在成员变量之后初始化 a = _a; } void GetA(){ pa.GetX(); printf("PointB的成员变量a的值是%d\n",a); } private: int a; PointA pa; PointA pa2; PointA pa3; }; void ProtectA(){ //PointB pb1; //报错 error C2512: “PointB”: 没有合适的默认构造函数可用 //分析:类PointB定义了有参构造函数,所以系统不再提供无参构造函数 PointB pb2(3, 4); pb2.GetA(); } void main(){ ProtectA(); system("pause"); }
/* 初始化列表之数组初始化 */ #include <iostream> #include <string> class Teacher { public: //构造函数 Teacher() :_name(""), _studentId{ 0 } { } //构造函数 Teacher(const std::string &name, unsigned int *a) :_name(name), _studentId{ a[0],a[1],a[3],a[4],a[5],a[6],a[7],a[8],a[9] } { } //析构函数 ~Teacher() { } public: //打印学生 void show(void) { printf("=======Teacher name[%s]===============\n", this->_name.c_str()); for (int i = 0; i < 10; i++) { printf("%5d", this->_studentId[i]); } printf("\n"); } private: std::string _name; unsigned int _studentId[10]; }; void test() { Teacher t1; unsigned int a[10] = { 0,1,2,3,4,5,6,7,8,9 }; Teacher t2("jack", a); printf("------t1 start-----\n"); t1.show(); printf("------t1 end-----\n"); printf("------t2 start-----\n"); t2.show(); printf("------t2 end-----\n"); } int main() { test(); return 0; }