类中带有非默认构造函数的类(c++)

Class with non-default constructor, within a class (C++)

本文关键字:c++ 构造函数 默认      更新时间:2023-10-16

我有一个类,在它的构造函数中有两个参数,一个int和一个void(*)(void)所以通常当我需要调用它时,我像这样做:

obj_child (int_value, pointer_to_foo);

现在我想要的是实例化obj_child 与常量参数,在另一个类。

所以我试了:

class obj_parent
{
    private:
        obj_child child_instantiation (int_value, pointer_to_foo);
};

,但这似乎给了我两个编译器错误的行我声明child_instantiation所以我猜参数不能传递到那里,但在其他地方。

注意child_instantiations应该对所有obj_parent实例化具有相同的参数,因此它们不应该作为obj_parent构造函数参数传递。

声明类指针,然后在堆编译上创建一个新的,但我不想这样做,我不知道它是否有效(我的调试器不能观察引用,所以很难监控它的值)。

class obj_parent
    {
        private:
            obj_child *child_instantiation;
    };
obj_parent::
obj_parent (void)
{
    child_instantiation = new obj_child child_instantiation (int_value, pointer_to_foo);

}

谢谢!

(请不要介意语义,child - parent与继承无关,只是现在想不出更好的名字)

必须在类的构造函数中初始化对象。

obj_parent() : child_instantiation (int_value, pointer_to_foo) {}

你可以这样做

// note that this class has no constructor with 0 args
class PrimaryClass {
  public:
    PrimaryClass(int arg1, void* arg2) {
      // do something here
    }
};
class SecondaryClass {
  private:
    PrimaryClass my_obj;
  public:
    // We call the constructor to my_obj here (using initialization lists)
    SecondaryClass(int arg1, void* arg2) : my_obj(arg1, arg2) {
      // other stuff here, maybe
    }
};