C++类初始化 构造函数 笔记
2013-11-15 09:34
190 查看
当我们定义了构造函数之后,原有的默认构造函数就不可用了。但是拷贝构造函数还是可用的。
当然我们也可以显式禁止拷贝构造函数。
我们也可以自己定义默认构造函数,可以不带参数就构造一个类对象。
s1不带任何参数也是OK的。因为默认构造函数String(const char p = "") 已经带了默认参数""了。
模板类:
什么时候应该要定义默认构造函数呢?
1 必须情况!当我们需要使用这个类在数组当中,如下:
或者我们需要隐藏构造函数的时候,例如单一模式(singleton)的时候需要这么做。
2 我们认为默认值有道理的时候,如数字值为0,字符串为""。但是如栈的数据类型就不应该带默认值了。
reference:
The C++ Programming Language by Bejarne
当然我们也可以显式禁止拷贝构造函数。
我们也可以自己定义默认构造函数,可以不带参数就构造一个类对象。
class String { public: String(const char∗ p = ""); // default constructor : empty string // ... }; String s1; // OK String s2 {}; // OK
s1不带任何参数也是OK的。因为默认构造函数String(const char p = "") 已经带了默认参数""了。
模板类:
template<class T> struct Handle { T∗ p; Handle(T∗ pp = new T{}) :p{pp} { } // ... }; Handle<int> px; // will generate int{}; px == 0
什么时候应该要定义默认构造函数呢?
1 必须情况!当我们需要使用这个类在数组当中,如下:
struct S1 { S1(); }; // has default constructor struct S2 { S2(string); }; // no default constructor S1 a1[10]; // OK: 10 default elements S2 a2[10]; // error : cannot initialize elements S2 a3[] { "alpha", "beta" }; // OK: two elements: S2{"alpha"}, S2{"beta"} vector<S1> v1(10); // OK: 10 default elements vector<S2> v2(10); // error : cannot initialize elements vector<S2> v3 { "alpha", "beta" }; // OK: two elements: S2{"alpha"}, S2{"beta"} vector<S2> v2(10,""); // OK: 10 elements each initialized to S2{""} vector<S2> v4; // OK: no elements
或者我们需要隐藏构造函数的时候,例如单一模式(singleton)的时候需要这么做。
2 我们认为默认值有道理的时候,如数字值为0,字符串为""。但是如栈的数据类型就不应该带默认值了。
reference:
The C++ Programming Language by Bejarne
相关文章推荐
- C++类构造函数初始化列表
- C++类构造函数初始化列表
- c++笔记03---构造函数,初始化表,文件分类,钟表练习,析构函数,this 指针
- C++类构造函数初始化列表
- C++类构造函数初始化列表
- C++类构造函数初始化列表
- Java编程思想笔记_以构造函数确保初始化的进行
- C++类构造函数初始化列表
- C++类成员冒号初始化以及构造函数内赋值
- C++类构造函数初始化列表
- 《深度探索C++对象模型》笔记(三)构造函数、拷贝构造和初始化列表
- C++类构造函数初始化列表顺序
- C++类构造函数初始化列表
- C++类构造函数初始化列表
- C++类构造函数初始化列表
- 重温《C++ Primer》笔记四 构造函数的初始化列表
- JAVA学习笔记之构造函数和初始化块
- C++类构造函数初始化列表
- C++类构造函数初始化列表
- C++类成员冒号初始化以及构造函数内赋值