RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 638009
Accepted
AleksBak
AleksBak
Asked:2020-03-11 11:20:19 +0000 UTC2020-03-11 11:20:19 +0000 UTC 2020-03-11 11:20:19 +0000 UTC

类构造函数中的重载

  • 772

我没有找到可以回答这么简单的答案的东西。在此之前,我并没有以这种方式重载构造函数(见下面的代码)。在函数/方法中,一切都以这种方式进行。事实上,这里的一切似乎都很正常(乍一看;))。它编译没有错误(只有一个不显眼的警告出现 - 关于它,也在下面)。那些。这些信息对那些这样做的人很有用,甚至对那些第一次就能很好地工作的人也很有用。事实上,它是这样错误的:

Camera::Camera(int width, int height)
{
    Camera(width, height, CAMERA_ENCODING::MJPEG);
}

Camera::Camera(int width, int height, CAMERA_ENCODING encoding)
{
    ... // какой-то код
}

那么正确的方法是什么?真的有必要在上层构造函数中也完全重写整个初始化代码吗?还有更多关于 varning 的信息——他写道,上层构造函数中的字段尚未初始化。具体来说,这是指向缓冲区的链接。在底部,上面没有吃东西,但有警告。它通常在其代码中在这里初始化。在顶部,理论上应该如此,但事实证明并非如此。谢谢,对不起,如果我在这里写得太多了。

c++
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    AnT stands with Russia
    2020-03-11T14:06:54Z2020-03-11T14:06:54Z

    如果您尝试将调用从一个构造函数委托给另一个构造函数,那么这样做是这样的

    Camera::Camera(int width, int height) : Camera(width, height, CAMERA_ENCODING::MJPEG)
    {
      ...
    }
    

    然而,这种委托是 C++11 及更高版本的特性。

    在 C++11 之前,C++ 中没有委托构造函数调用的语法,如果需要消除代码重复,那么如果可能的话,公共代码必须移到普通函数中(丢失设计特点)。

    在您的版本中,会创建(并立即销毁)与构造对象无关的独立临时对象。

    • 5
  2. Harry
    2020-03-11T20:05:06Z2020-03-11T20:05:06Z

    由于注释中缺少正常代码的空间...

    在这种特殊情况下,围栏花园没有意义,创建一个带有默认第三个参数的构造函数就足够了:

    Camera::Camera(int width, int height, CAMERA_ENCODING encoding = CAMERA_ENCODING::MJPEG)
    {
        ... // какой-то код
    }
    

    但是,如果指定了第三个参数,则将使用传递的值;如果不是 - 默认值:

    Camera cam1(200, 300, CAMERA_ENCODING::SUPERCODE);
    Camera cam2(200, 300);
    

    对于cam1将被调用Camera::Camera(200, 300, CAMERA_ENCODING::SUPERCODE);,对于cam2- Camera::Camera(200, 300, CAMERA_ENCODING::MJPEG);。

    这是最简单的例子 -

    class Test
    {
    public:
        Test(int w, int h, int code = -1)
        {
            cout << "w = " << w << "  h = " << h
                 << "  code = " << code << endl;
        }
    };
    
    
    int main()
    {
        Test a(2,4,8);
        Test b(3,6);
    }
    

    给出输出

    w = 2  h = 4  code = 8
    w = 3  h = 6  code = -1
    
    • 3

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5