构造函数 参数初始化列表
2017-04-25 19:27
375 查看
建立类对象时会自动调用构造函数
构造函数不需且不能手动调用
默认构造函数:在建立对象时不必给出实参的构造函数。包括无参构造函数和全部参数都有默认值的构造函数。
如果用户没有定义构造函数,则系统会自动提供一个默认构造函数,即上述的无参构造函数,函数体为空。
参数初始化表的必要性
当给类中的私有常量定义时,必须通过参数初始化列表来定义,因为参数初始化表是先于函数体执行的,而常量不允许修改。class Circle { public: Circle():m_dPi(3.14){} private: const double m_dPi; };
下面这种写法是不被允许的
Circle(){m_dPi=3.14;}
使用默认参数的构造函数
在声明构造函数时指定默认值,而不能只在定义构造函数时指定默认值。因为构造函数的声明在类定义中,而类定义是放在头文件中的,是类的对外接口,而构造函数的定义是类的实现细节,用户不一定看得到。这一特点在分文件中尤其明显。
class Box{ public: Box(int h=10,int w=20,int len =30); //声明构造函数时指定默认参数 /* 声明构造函数时形参名可以省略(形参名不重要),即写成 Box(int =10,int =20,int=30); */ private: int height; int weight; int length; }; Box::Box(int h, int w, int len){ //定义构造函数时可以不指定默认参数 height=h; weight=w; length=len; }
拷贝构造函数
定义格式 :类名(const 类名 & 变量名)注:一般约定加const声明,避免在调用此函数时修改实参对象。
当采用直接初始化或赋值初始化实例化对象时系统会自动调用拷贝构造函数。
如果没有显性定义的拷贝构造函数则系统会自动生成一个默认的拷贝构造函数。
class Student{ public: Student(){m_strName="Jim";} /* 默认的拷贝构造函数: Student(const Student &stu){} */ Student(const Student &stu){m_strName=stu.m_strName} //显性定义的拷贝构造函数 private: string m_strName; }; int main() { Student stu1; Student stu2=stu1; Student stu3(stu1); return 0; }
相关文章推荐
- 第四周 项目一--三角形类的构造函数(4)参数初始化列表
- 构造函数及其参数列表初始化问题
- C++类构造函数初始化列表,子类向父类传参数
- C++类构造函数初始化列表,子类向父类传参数
- 初始化与清理(构造函数初始化,可变参数列表,enum)
- 构造函数初始化列表和构造函数体内赋值
- 报错:没有与参数列表匹配的构造函数 "CFileDialog::CFileDialog" 实例
- friend,inline,构造函数初始化列表
- 类构造函数初始化列表
- 第五章.初始化和清理 初始化可变参数列表
- C++ 构造函数初始化列表
- 续:为何说 C++ 构造函数初始化列表异常机制是必要的
- C++类构造函数初始化列表
- C++ 构造函数初始化列表
- 第四周项目1-三角形类的构造函数-参数初始化表
- C++学习——构造函数初始化列表
- 从头认识java-4.8 数组的初始化(2)-可变参数列表
- C++类构造函数初始化列表
- C++ 多继承构造函数初始化列表调用顺序
- C++类构造函数初始化列表