我没有找到可以回答这么简单的答案的东西。在此之前,我并没有以这种方式重载构造函数(见下面的代码)。在函数/方法中,一切都以这种方式进行。事实上,这里的一切似乎都很正常(乍一看;))。它编译没有错误(只有一个不显眼的警告出现 - 关于它,也在下面)。那些。这些信息对那些这样做的人很有用,甚至对那些第一次就能很好地工作的人也很有用。事实上,它是这样错误的:
Camera::Camera(int width, int height)
{
Camera(width, height, CAMERA_ENCODING::MJPEG);
}
Camera::Camera(int width, int height, CAMERA_ENCODING encoding)
{
... // какой-то код
}
那么正确的方法是什么?真的有必要在上层构造函数中也完全重写整个初始化代码吗?还有更多关于 varning 的信息——他写道,上层构造函数中的字段尚未初始化。具体来说,这是指向缓冲区的链接。在底部,上面没有吃东西,但有警告。它通常在其代码中在这里初始化。在顶部,理论上应该如此,但事实证明并非如此。谢谢,对不起,如果我在这里写得太多了。
如果您尝试将调用从一个构造函数委托给另一个构造函数,那么这样做是这样的
然而,这种委托是 C++11 及更高版本的特性。
在 C++11 之前,C++ 中没有委托构造函数调用的语法,如果需要消除代码重复,那么如果可能的话,公共代码必须移到普通函数中(丢失设计特点)。
在您的版本中,会创建(并立即销毁)与构造对象无关的独立临时对象。
由于注释中缺少正常代码的空间...
在这种特殊情况下,围栏花园没有意义,创建一个带有默认第三个参数的构造函数就足够了:
但是,如果指定了第三个参数,则将使用传递的值;如果不是 - 默认值:
对于
cam1将被调用Camera::Camera(200, 300, CAMERA_ENCODING::SUPERCODE);,对于cam2-Camera::Camera(200, 300, CAMERA_ENCODING::MJPEG);。这是最简单的例子 -
给出输出