文章目录
1. 构造函数与初始化表
1.1 构造函数初始化成员变量
#include <iostream>
using namespace std;
class Store {
public:
/*初始化表语法如下*/
Store (int fru, int wea)
{
fruits = fru;
weapons = wea;
cout << "我是构造函数" << endl;
}
int fruits;
int weapons;
};
int main(void)
{
Store St1(99,100);
cout << St1.fruits << ' ' << St1.weapons << endl;
return 0;
}
1.2 换一种写法,初始化表
初始化表功能上等同给成员变量赋值(初始化表语法只适用于构造函数)
#include <iostream>
using namespace std;
class Store {
public:
/*初始化表语法如下*/
Store (int fru, int wea) : fruits (fru), weapons (wea)
{
/*
就不用这样写了!!!
fruits = fru;
weapons = wea;
*/
cout << "我是构造函数" << endl;
}
int fruits;
int weapons;
};
int main(void)
{
Store St1(99,100);
cout << St1.fruits << ' ' << St1.weapons << endl;
return 0;
}
输出:
this is construct function
99 100
2. 初始化表的存在只是为了换个方法赋值吗?其实不然!!!
某些情况下,赋值语句是不允许写在构造函数体内部的(在构造函数前就要首先被构造的成员)
2.1 类的成员变量用到引用类型
#include <iostream>
using namespace std;
class Store {
public:
Store (int fru, int wea, int& param) : fruits (fru), weapons (wea),ref(param) /*引用在初始化表中赋值*/
{
cout << "this is construct function" << endl;
}
int fruits;
int weapons;
/*这里是一个int 引用类型*/
int& ref;
};
int main(void)
{
int s = 88;
Store St1(99,100,s);
cout << St1.fruits << ' ' << St1.weapons << ' ' << St1.ref << endl;
return 0;
}
this is construct function
99 100 88
为什么这里要用到初始化表呢?------类成员变量中有一个int &ref,有一句话叫“引用即别名”,构造函数函数体当中已经可以使用使用ref这个引用了,但是这时还不知道ref是对谁的引用呢!!!,所以引用必须在函数体之前被定义,所以只好使用初始化表咯
2.2 类的成员变量用到子对象
类当中有自己的成员子对象,在调用类的构造函数前,需要先调用成员子对象。(成员子对象如果有默认构造函数,无须再特意使用初始化表来构造成员子对象;但是一旦写了一个构造函数,没有默认构造函数,就必须使用初始化表提供成员子对象的构造方式)
#include <iostream>
using namespace std;
class Store {
public:
Store (int fru, int wea) : fruits (fru), weapons (wea)
{
cout << "this is construct function" << endl;
}
int fruits;
int weapons;
};
class mastore {
public:
mastore (int subid, int fru, int wea) : m_subid (subid), m_store(fru,wea)/*没有m_store的默认构造函数,初始化表构造子对象*/{}
Store m_store; /*类mastore 有一个成员子对象 m_store*/
int m_subid;
};
int main(void)
{
mastore mst(01,99,100);
cout << mst.m_store.fruits << ' ' << mst.m_store.weapons << endl;
return 0;
}
输出:
this is construct function
99 100