#include <iostream>
using namespace std;
/* 类 Info 1
class Info
{
public:
Info() :type(1), name('a')
{
InitRest();
}
Info(int i) : type(i), name('a')
{
InitRest();
}
Info(char e) : type(1), name(e)
{
InitRest();
}
private:
int type;
char name;
void InitRest(){}
};
*/
//以上 Info()类的代码,是否可以简化呢? 三个构造函数,除了参数和初始化列表不同,函数体都是一样的
//我们可以将一个构造函数设定为 基准版本 ,比如这里的 Info() 版本的构造函数,而其他构造函数可以通过委派 基准版本 来进行初始化
// C++ 11中的委派构造函数,是在构造函数初始化列表位置进行构造和委派的
//我们将上面Info类的代码进行简化
//类 Info 2
/*
class Info
{
public:
Info()//这是 基准版本 的构造函数 称之为 “目标构造函数”
{
InitRest();
}
// 所谓委派构造,就是指委派函数,将构造的任务 委派给了目标构造函数来完成这样一种类构造的方式
Info(int i) : Info() //这个在初始化列表中使用了 基准版本 的构造函数的 构造函数 就称之为 委派构造函数
{
type = i;
}
// 注意:委派构造函数 不能有初始化列表,所以成员变量要赋初值,必须放在函数体里
//Info(char e) :Info(), name(e) //这里报错 error C3511: “Info”: 对委托构造函数的调用应仅为成员初始值设定项
//{
//}
Info(char e) : Info()
{
name = e;
}
void GetType() { cout << "type = " << type << endl; }
private:
int
C++ 11 委派构造函数
最新推荐文章于 2022-10-23 21:13:35 发布

最低0.47元/天 解锁文章
1095

被折叠的 条评论
为什么被折叠?



