C++的构造函数初始化列表

        在看人家源码的时候卡住了,看见初始化构造函数的时候看不懂了,构造函数的:,,,这些都是些啥。

纠结了半天,然后各种问各种搜资料,对这个东西理解了一部分了。

        C++类中成员变量的初始化有两种方式:
构造函数初始化列表和构造函数体内赋值。下面看看两种方式有何不同。

#include "stdafx.h"
#include <string>

using namespace std;

class Company
{
public:
	// 构造函数初始化列表赋值
	Company(string name,string addr,string boss,int staffCount)
		:m_sName(name)
		,m_sAddr(addr)
		,m_sBoss(boss)
		,m_nStaff(staffCount)
	{
	}

	/*// 一般赋值的方法
	Company(string name,string addr,string boss,int staffCount)
	{
		m_sName  = name;
		m_sAddr  = addr;
		m_sBoss  = boss;
		m_nStaff = staffCount;
	}*/

private:
	string m_sName;
	string m_sAddr;
	string m_sBoss;
	int    m_nStaff;

public:
	void printInfo()
	{
		printf("The  m_sName is = %s\n",m_sName.c_str());
		printf("The  m_sAddr is = %s\n",m_sAddr.c_str());
		printf("The  m_sBoss is = %s\n",m_sBoss.c_str());
		printf("The m_nStaff is = %d\n",m_nStaff);
	}
};

int main(int argc, _TCHAR* argv[])
{
	Company* pComp = new Company("Ghgame","Tianfusoftwarepark","dinghq.alex",80);
	pComp->printInfo();
	delete pComp;
	system("pause");
	return 0;
}

还是看看打印:



通过打印来看初始化还是起到作用的(学程序就是多写多调试多打印看看结果嘛)。

但是,如果要是有一个子类,继承了它,子类构造函数的初始化就有点问题了。

class Subsidiary : public Company
{
public:
	/*// 如果这样写是不行的,父类Company没有相同的构造函数
	Subsidiary(string name,string addr,string boss,int staffCount,int createDate){};*/

	Subsidiary(string name,string addr,string boss,int staffCount,int createDate)
		// 必须使用初始化列表增加对父类的初始化
		:Company(name,addr,boss,staffCount)
		,m_nCreateDate(createDate)
	{};
	~Subsidiary(){};

private:
	// 当子类需要多加自己的参数的时候就要显式调用父类的构造函数初始化
	int m_nCreateDate;
};

这样一个子类如果要给父类赋值同时加上自己的m_nCreateDate属性,构造函数就不能像注释中那样用一般的构造函数来赋值了,要用构造函数的初始化列表来赋值。

也只理解到这里。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值