1,构造函数初始化列表:
CmCurveEx::CmCurveEx(const Mat& srcImg1f, float maxOrntDif): m_maxAngDif(maxOrntDif), m_img1f(srcImg1f)
{
CV_Assert(srcImg1f.type() == CV_32FC1);
m_h = m_img1f.rows;
m_w = m_img1f.cols;
m_pDer1f.create(m_h, m_w, CV_32FC1);
m_pOrnt1f.create(m_h, m_w, CV_32FC1);
m_pLabel1i.create(m_h, m_w, CV_32SC1);
m_pNext1i.create(m_h, m_w, CV_32SC1);
}</span>
而在类参的定义中有这样的定义:
class CmCurveEx
{
public:
const Mat &m_img1f; // Input image
float m_maxAngDif; // 曲线中的最大允许角差
}</span>
这是在写一个类的构造函数时的初始化列表操作,这个跟类的多继承不一样,类的多继承是:
class 类名:基类a,基类b
{
.........
}
而构造函数初始化列表的语法是这样的:
构造函数():类参a(初始化值),类参b(初始化值)
{
................
}
构造函数初始化列表是给类成员初始化。
构造函数初始化时必须采用初始化列表一共有三种情况,
1.需要初始化的数据成员是对象(继承时调用基类构造函数)
2.需要初始化const修饰的类成员
3.需要初始化引用成员数据
2,CV_Assert(srcImg1f.type() == CV_32FC1);
这是一个断言判断,如果括号内为false则抛出一个错误并终止程序,否则正常运行