1. 初始化列表注意:
1.1 初始化列表,先声明,在调用构造函数时定义并初始化 ,定义初始化的顺序和声明的顺序一致。
1.2 代码实现
//先声明了int m_a; int m_b;int m_c 在根据声明的顺序进行定义初始化
//调用构造函数是 定义并初始化,顺序和声明的顺序一致
//int m_a=a;int m_c=c;int m_b=b
person(int a, int b, int c) :m_a(a), m_b(b), m_c(c) {}
1.3 普通的构造函数,先定义,在赋值
1.4 代码实现
class person
{
public:
//先定义了int m_a; int m_b;int m_c; 然后在分别赋值
person(int a,int b,int c)
{
m_a = a;
m_b = b;
m_c = c;
}
int m_a;
int m_c;
int m_b;
};
2.类对象成为另一个类的成员
类中有多个对象时,构造的顺序是先构造里面的对象,在构造外面的对象
类中有多个对象时,析构时顺序是先析构外面的对象,在析构里面的对象
3. 调用函数的使用
class Phone
{
public:
Phone(const string name)
{
pho_name = name;
}
string pho_name;
};
class Game
{
public:
Game(const string name)
{
g_name = name;
}
string g_name;
};
class Person
{
public:
/*Person(string p_n, string pho_n, string g_n)
{
p_name = p_n;
Phone.pho_name = pho_n;
Game.game_name = g_n;
}*/
//
Person(const string p_n, const string pho_n, const string g_n) :p_name(p_n), phone(pho_n), game(g_n)
{
cout << "person的构造函数!" << endl;
}
void show()
{
cout << p_name << "拿着" << phone.pho_name << "玩着" << game.g_name << endl;
}
//只能调用无参构造函数
Phone phone;
Game game;
string p_name;
};
4.explicit
c++提供了关键字explicit,禁止通过构造函数进行的隐式转换。
声明为 explicit的构造函数不能在隐式转换中使用。
explicit注意:
explicit用于修饰构造函数,防止隐式转化。
是针对单参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造)而言。