//构造函数的对象初始化列表
#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;
}