C ++:如何将一个对象传递给另一个对象构造函数?

盐沙拉

我知道这个问题经常被问到,但是我来自Java,而且很长一段时间都没有做过C / C ++。

您能提醒我如何在C ++中正确地将一个对象传递给另一个对象的构造函数吗?

例如,我需要将一个新的Light对象传递给Button构造函数:

// LED Light
class Light {
    int pin;

    public:
        Light(int p) {
            pin = p;
        }
};

// BUTTON
class Button {
    Light ledLight;

    public:
        Button(Light l) {
            ledLight = l;
        }

};

Light my_led(0);

Button my_button(my_led);

这就是我将在类似Java的时尚中实现的方式。但是,这会产生以下错误:

::  In constructor ‘Button::Button(Light)’:
::  16:19: error: no matching function for call to ‘Light::Light()’
::  16:19: note: candidates are:
::  6:3: note: Light::Light(int)
::  6:3: note:   candidate expects 1 argument, 0 provided
::  2:7: note: Light::Light(const Light&)
::  2:7: note:   candidate expects 1 argument, 0 provided

是通过引用传递对象还是在创建新的Button时尝试创建新的对象?

还是我需要在Button的构造函数中将Light声明为指针?

任何帮助都非常感谢!

Teeeeeeeeeeeeeeeeeeeeeeeeeeeej

您缺少默认的构造函数。尝试像这样修改您的课程:

class Light {
    int pin;

    public:
        Light()=default;  //<-- put this in
        Light(int p) {
            pin = p;
        }
};

至于为什么不自动生成默认构造函数的原因,是因为您已经声明了某种类型的构造函数,所以编译器不会生成默认构造函数(来自http://en.cppreference.com/w/ cpp / language / default_constructor,请参阅有关隐式声明/定义的构造函数的部分)。


回应评论:

它不会尝试调用默认构造函数,而不是调用传递参数的构造函数吗?

当您的执行代码到达最后一行时:

Button my_button(my_led);

您正在实例化aButton和aLight作为Button实例化过程的一部分在不指定默认Light::Light()构造函数的情况下,您将省略有关如何实例化Light不带值对象的说明,这需要在将值复制my_led到my_button中之前进行。您将获得预期的结果,当前您只是向编译器遗漏了有关如何执行中间步骤(即,Light不带任何参数的实例化)的指令


需要考虑的一些事情:

什么是你真正想干什么?只需查看您的指令代码即可:

Light my_led(0);

Button my_button(my_led);

在我看来,您似乎想说的是“一个my_led存在的灯”和“一个my_button存在且需要的按钮my_led”。您是否希望按钮引用已经存在的特定LED,或者仅引用具有相同值的LED?

如果您认为要通过该按钮引用实际的LED,则可以考虑执行以下操作:

class Button {
    const Light *ledLight;

    public:
        Button(const Light& l) : 
            ledLight{&l}
        {}
};

这样,您Button就有了指向Light创建的指针,并且LightButton代码内部所做的任何操作都将在Light已实例化对象上执行,而不是Light通过Light使用当前Button构造函数进行复制构造来创建的某些单独副本

如果您希望按钮实际修改灯光,请Button像这样修改

class Button {
    // constant reference to changeable object
    Light *  const ledLight; 

    public:
        /**
         * You're providing a reference to a light that can be changed 
         * (i.e. button code can toggle lit status or something)
         */
        Button(Light & l) : 
            ledLight{&l}
        {}
};

您可能认为以上内容是按钮和LED之间的连线不变。如果您认为将要重新分配从按钮亮起的LED,则也可以const从指针成员中取出关键字Button

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将具有字符串数据成员的类的对象传递给C ++中的另一个类

来自分类Dev

在cython中将c ++对象传递给另一个对象的方法的方法

来自分类Dev

在cython中将c ++对象传递给另一个对象的方法的方法

来自分类Dev

C# - 将一个对象传递给构造函数,该对象目前为空,但稍后会创建

来自分类Dev

C ++:如何将指针传递给另一个类的成员函数?

来自分类Dev

C ++试图将类传递给另一个类的构造函数

来自分类Dev

如何将编写的对象传递给另一个类的构造函数?

来自分类Dev

C ++:将一个对象复制到构造函数中的另一个对象

来自分类Dev

在Objective-C中将对象传递给另一个类的最佳方法是什么?

来自分类Dev

如何将函数和参数的变量列表传递给C中的另一个函数?

来自分类Dev

C ++如何将成员函数指针传递给另一个类?

来自分类Dev

如何将字符串数组传递给 C 中的另一个函数

来自分类Dev

如何将char数组的值传递给C中另一个文件中的函数?

来自分类Dev

如何将C#泛型类型传递给另一个类

来自分类Dev

C++ 如何将引用从一个函数传递到另一个函数?

来自分类Dev

如何在Unity3d中将C#组件从一个游戏对象传递到另一个

来自分类Dev

将匿名函数作为唯一参数传递给另一个函数(C ++)

来自分类Dev

C ++将具有重载构造函数的对象添加到另一个对象

来自分类Dev

将具有不同数量参数的函数传递给另一个函数C ++

来自分类Dev

C ++-将数组返回主函数并将数组传递给另一个函数

来自分类Dev

在C中如何将局部函数变量值传递给另一个函数并打印值而不会出现错误

来自分类Dev

在构造函数C ++中调用另一个对象的方法

来自分类Dev

将模板类的对象传递给另一个类的构造函数

来自分类Dev

C ++使用移动语义将参数传递给另一个函数

来自分类Dev

c尝试将时间和日期传递给另一个函数

来自分类Dev

C ++将函数参数传递给另一个lambda

来自分类Dev

C#将一个Action <>传递给另一个Action <>

来自分类Dev

C ++-如何在另一个类中使用私有构造函数实例化对象

来自分类Dev

C ++线程:如何使用lambda函数将主线程中的参数传递给另一个线程

Related 相关文章

  1. 1

    如何将具有字符串数据成员的类的对象传递给C ++中的另一个类

  2. 2

    在cython中将c ++对象传递给另一个对象的方法的方法

  3. 3

    在cython中将c ++对象传递给另一个对象的方法的方法

  4. 4

    C# - 将一个对象传递给构造函数,该对象目前为空,但稍后会创建

  5. 5

    C ++:如何将指针传递给另一个类的成员函数?

  6. 6

    C ++试图将类传递给另一个类的构造函数

  7. 7

    如何将编写的对象传递给另一个类的构造函数?

  8. 8

    C ++:将一个对象复制到构造函数中的另一个对象

  9. 9

    在Objective-C中将对象传递给另一个类的最佳方法是什么?

  10. 10

    如何将函数和参数的变量列表传递给C中的另一个函数?

  11. 11

    C ++如何将成员函数指针传递给另一个类?

  12. 12

    如何将字符串数组传递给 C 中的另一个函数

  13. 13

    如何将char数组的值传递给C中另一个文件中的函数?

  14. 14

    如何将C#泛型类型传递给另一个类

  15. 15

    C++ 如何将引用从一个函数传递到另一个函数?

  16. 16

    如何在Unity3d中将C#组件从一个游戏对象传递到另一个

  17. 17

    将匿名函数作为唯一参数传递给另一个函数(C ++)

  18. 18

    C ++将具有重载构造函数的对象添加到另一个对象

  19. 19

    将具有不同数量参数的函数传递给另一个函数C ++

  20. 20

    C ++-将数组返回主函数并将数组传递给另一个函数

  21. 21

    在C中如何将局部函数变量值传递给另一个函数并打印值而不会出现错误

  22. 22

    在构造函数C ++中调用另一个对象的方法

  23. 23

    将模板类的对象传递给另一个类的构造函数

  24. 24

    C ++使用移动语义将参数传递给另一个函数

  25. 25

    c尝试将时间和日期传递给另一个函数

  26. 26

    C ++将函数参数传递给另一个lambda

  27. 27

    C#将一个Action <>传递给另一个Action <>

  28. 28

    C ++-如何在另一个类中使用私有构造函数实例化对象

  29. 29

    C ++线程:如何使用lambda函数将主线程中的参数传递给另一个线程

热门标签

归档