怎样构造一个正确高效的C++的类的构造函数
2014-03-03 17:01
309 查看
推荐一本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)不提供初始化列表,默认调用基类的默认隐式构造函数
相关文章推荐
- 怎样构造一个正确高效的C++的类的拷贝构造函数和赋值函数
- 怎样正确构造一个auto_ptr?
- C++构造 函数,析构函数,拷贝构造函数,赋值构造函数,一个内存错误例子!
- C++中对已分配空间的指针调用一个类的构造函数
- c++实现日期类(class Date) 构造函数 拷贝构造 操作符重载(输入输出 比较操作 算数运算 自增自减)
- C++转Java自学之路(三)构造代码块、构造函数与static修饰符
- Java 异常类层次结构及怎样设计一个高效合理的异常处理框架
- c++学习笔记4,调用派生类的顺序构造和析构函数(一个)
- 怎样用 C/C++ 开发一个原生程序运行在 Android 下而不用 ADK、NDK
- C++之构造函数,拷贝构造,析构函数
- C++ 转换类型运算符 调用构造函数将变量转化成为一个对象的成员变量
- C++拾遗--构造函数(二)拷贝构造
- C/C++面试之算法系列--怎样快速检测出一个巨大的单链表中是否具备死链及其位置
- C++基础-构造函数/析构函数/拷贝构造
- C++中如果声明一个对象指针时,会不会调用构造函数?
- C++ 中使用构造函数初始化列表和普通构造函数内部初始化的区别
- C++中如果声明一个对象指针时,不会调用构造函数
- 你好,C++(33)对象生死两茫茫 6.2.3 一个对象的生与死:构造函数和析构函数
- C++中的构造函数与拷贝构造的优化处理
- C++构造,析构,友元类,对象,static成员,复制构造函数,运算符重载杂谈