怎样构造一个正确高效的C++的类的构造函数
展开全部
推荐一本C++经典好书:effetive c++,该篇文章部分来源于该书
类的构造函数看似简单,实则很有玄机,在构造一个类的构造函数时,只要遵循以下几步,便可以建立出一个正确的高效的构造函数:
1.了解C++编译器默默编写并调用了哪些函数,若不想使用编译器自动生成的函数, 就该明确拒绝(effctive c++条款5,6)
2.定义的构造函数不能指定其返回值的类型,也不能指定为void类型。
3.若要用类定义对象,则构造函数必须是公有型成员函数,否则类无法实例化。
若类仅用于派生其他类,则构造函数可定义为保护型成员函数(1.为什么private不行?我理解的是只用作一次派生是可以的,
但用作两次派生就不可以了, 因为若派生两次后,私有成员就没法再被访问了,也即基类的构造函数无法被调用了)。
4.倘若有指针型成员变量,则要对拷贝构造函数进行重写(见我的另一篇文章:“若类中有指针型数据成员,类的几个函数的重写”)
5..当构造函数重载或设定构造函数默认形参时,要注意避免出现二义性。
6..构造函数最好使用成员初始值列表,而不要在构造函数内使用赋值操作
7..考虑是不是要把构造函数设置为explict特性
8.决不在构造函数和析构过程中调用virtual函数
9.倘若是派生类的构造函数,则考虑是(1)用初始化成员列表值的形式调用特定的基类的构造函数还是(2)不提供初始化列表,默认调用基类的默认隐式构造函数
类的构造函数看似简单,实则很有玄机,在构造一个类的构造函数时,只要遵循以下几步,便可以建立出一个正确的高效的构造函数:
1.了解C++编译器默默编写并调用了哪些函数,若不想使用编译器自动生成的函数, 就该明确拒绝(effctive c++条款5,6)
2.定义的构造函数不能指定其返回值的类型,也不能指定为void类型。
3.若要用类定义对象,则构造函数必须是公有型成员函数,否则类无法实例化。
若类仅用于派生其他类,则构造函数可定义为保护型成员函数(1.为什么private不行?我理解的是只用作一次派生是可以的,
但用作两次派生就不可以了, 因为若派生两次后,私有成员就没法再被访问了,也即基类的构造函数无法被调用了)。
4.倘若有指针型成员变量,则要对拷贝构造函数进行重写(见我的另一篇文章:“若类中有指针型数据成员,类的几个函数的重写”)
5..当构造函数重载或设定构造函数默认形参时,要注意避免出现二义性。
6..构造函数最好使用成员初始值列表,而不要在构造函数内使用赋值操作
7..考虑是不是要把构造函数设置为explict特性
8.决不在构造函数和析构过程中调用virtual函数
9.倘若是派生类的构造函数,则考虑是(1)用初始化成员列表值的形式调用特定的基类的构造函数还是(2)不提供初始化列表,默认调用基类的默认隐式构造函数
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询