07~C++ 初始化表

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值