标签(空格分隔): cpp
构造函数有三种方式定义(初始化)
1.函数体内赋值
2.this 指针在构造函数函数体内赋值
3.初始化表,冒号后面
(冒号后面只能用括号,不能用等于号)
this指针:每一个类对象都有一个隐藏的指针
构造函数:初始化对象
一个类可以有多个构造函数,以提供不同的初始化方式
定义的是以下几个参数
private:
const int mScaleNumber;
const float mScaleGap;
const std::vector<int> mInputNetSize4D;
传入的参数和定义的参数不一样
传入的参数经构造函数初始化时,可以经过不同的组合变成新的参数:
CvMatToOpInput::CvMatToOpInput(const Point<int>& netInputResolution, const int scaleNumber, const float scaleGap) :
mScaleNumber{scaleNumber},
mScaleGap{scaleGap},
mInputNetSize4D{{mScaleNumber, 3, netInputResolution.y, netInputResolution.x}}
explicit
explicit 指定符指定构造函数或转换函数 (C++11 起)不允许隐式转换或复制初始化。
示例
struct A
{
A(int) { } // 转换构造函数
A(int, int) { } // 转换构造函数 (C++11)
operator bool() const { return true; }
};
struct B
{
explicit B(int) { }
explicit B(int, int) { }
explicit operator bool() const { return true; }
};
int main()
{
A a1 = 1; // OK:复制初始化选择 A::A(int)
A a2(2); // OK:直接初始化选择 A::A(int)
A a3 {4, 5}; // OK:直接列表初始化选择 A::A(int, int)
A a4 = {4, 5}; // OK:复制列表初始化选择 A::A(int, int)
A a5 = (A)1; // OK:显式转型进行 static_cast
if (a1) ; // OK:A::operator bool()
bool na1 = a1; // OK:复制初始化选择 A::operator bool()
bool na2 = static_cast<bool>(a1); // OK:static_cast 进行直接初始化
// B b1 = 1; // 错误:复制初始化不考虑 B::B(int)
B b2(2); // OK:直接初始化选择 B::B(int)
B b3 {4, 5}; // OK:直接列表初始化选择 B::B(int, int)
// B b4 = {4, 5}; // 错误:复制列表初始化不考虑 B::B(int,int)
B b5 = (B)1; // OK:显式转型进行 static_cast
if (b2) ; // OK:B::operator bool()
// bool nb1 = b2; // 错误:复制初始化不考虑 B::operator bool()
bool nb2 = static_cast<bool>(b2); // OK:static_cast 进行直接初始化
}