在看人家源码的时候卡住了,看见初始化构造函数的时候看不懂了,构造函数的:,,,这些都是些啥。
纠结了半天,然后各种问各种搜资料,对这个东西理解了一部分了。
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;
}
~~~
还是看看打印:
![](https://box.kancloud.cn/2016-08-19_57b6ce7ec38c2.jpg)
通过打印来看初始化还是起到作用的(学程序就是多写多调试多打印看看结果嘛)。
但是,如果要是有一个子类,继承了它,子类构造函数的初始化就有点问题了。
~~~
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属性,构造函数就不能像注释中那样用一般的构造函数来赋值了,要用构造函数的初始化列表来赋值。
也只理解到这里。
- 前言
- C++读取配置文件
- 结构体内存对齐后所占内存空间大小的计算
- do{}while(0)的妙用
- Cocos2dx实现翻牌效果(CCScaleTo与CCOrbitCamera两种方式)
- C++的error LNK2019: 无法解析的外部符号编译错误
- Java使用JNI调用C++的完整流程
- strupr与strlwr函数的实现
- strcat函数实现
- Windows上VS使用pthread重温经典多线程卖票(pthreads-w32-2-8-0-release.exe)(windows上使用pthread.h)
- pthread的pthread_join()函数理解实验
- 顺序存储结构和链式存储结构的选择
- C语言冒泡排序
- VS看反汇编、寄存器、内存、堆栈调用来学习程序设计
- 快速排序
- C++的构造函数初始化列表
- fatal error C1083: 无法打开包括文件: “SDKDDKVer.h”: No such file or directory
- C++实现简单的String类