c++类构造函数
原创
©著作权归作者所有:来自51CTO博客作者mb62d4cb3345700的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
委托构造函数delegating constructor
其实最好使用默认参数值default value,代替重载以及委托构造函数。
委托构造函数可以减少代码量
#include <string>
class dummy {
public:
explicit dummy(int const& i) : s_{"Hello world"}, val_{i} {
}
explicit dummy() : dummy(5) {
}
std::string const& get_s() {
return s_;
}
int get_val() {
return val_;
}
private:
std::string s_;
const int val_;
};
auto main() -> int {
dummy d1(5);
dummy d2{};
}
explicit
如果一个类的构造函数只有一个参数(类型为A),那么不加这个explicit关键字,可以使用隐式转换,直接把一个A类型的变量赋值给某个对象。
但是这种方式不建议,所以可以加上explicit
#include <vector>
class intvec {
public:
// This one allows the implicit conversion
// intvec(std::vector<int>::size_type length)
// : vec_(length, 0);
// This one disallows it.
explicit intvec(std::vector<int>::size_type length)
: vec_(length, 0) {}
private:
std::vector<int> vec_;
};
auto main() -> int {
int const size = 20;
// Explictly calling the constructor.
intvec container1{size}; // Construction
intvec container2 = intvec{size}; // Assignment
// Implicit conversion.
// Probably not what we want.
// intvec container3 = size;
}