千家信息网

C++该在什么时候定义构造函数

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,本篇内容主要讲解"C++该在什么时候定义构造函数",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++该在什么时候定义构造函数"吧!C.40:如果类包含不变
千家信息网最后更新 2024年11月19日C++该在什么时候定义构造函数

本篇内容主要讲解"C++该在什么时候定义构造函数",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++该在什么时候定义构造函数"吧!

C.40:如果类包含不变式,则定义构造函数
Reason(原因)

这就是构造函数存在的目的。

Example(示例)
class Date {  // a Date represents a valid date
// in the January 1, 1900 to December 31, 2100 range
Date(int dd, int mm, int yy)
:d{dd}, m{mm}, y{yy}
{
if (!is_valid(d, m, y)) throw Bad_date{}; // enforce invariant
}
// ...
private:
int d, m, y;
};

在构造函数中通过Ensure表现不变式通常都是一个好主意。

Note(注意)

为了方便起见,即使类不包含不变式也可以为类定义构造函数。

struct Rec {
string s;
int i {0};
Rec(const string& ss) : s{ss} {}
Rec(int ii) :i{ii} {}
};

Rec r1 {7};
Rec r2 {"Foo bar"};
Note(注意)

C++11的初始化列表消除了很多构造函数存在的必要性。例如:

struct Rec2{
string s;
int i;
Rec2(const string& ss, int ii = 0) :s{ss}, i{ii} {} // redundant
};

Rec2 r1 {"Foo", 7};
Rec2 r2 {"Bar"};

Rec2的构造函数是多余的。同时成员初始化器提供的int的默认值会做得更好。

Enforcement(实施建议)
  • 如果类包含用户定义的拷贝操作但是没有提供构造函数(用户定义的拷贝是类具有不变式的明显标志)

到此,相信大家对"C++该在什么时候定义构造函数"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0