C ++如何使用参数化构造函数实例化对象?

时间:2016-03-31 09:55:24

标签: c++ visual-studio constructor

我在C ++中使用参数化构造函数有一些理解问题。 如果我有一个带有一个构造函数的类,它有两个函数参数,我怎样才能在其他类头文件中实例化它?

例如:

public:
      MyFunction myfunction(param1, param2); //makes an error

我如何声明这样的对象?

4 个答案:

答案 0 :(得分:3)

您需要在类声明中编写MyFunction myfunction;

然后在构造函数的成员初始化列表中,myfunction是其成员的类,写

/*Your constructor here*/ : myfunction(param1, param2)
{
    /*the constructor body*/
}

冒号后面的位是成员初始化列表。 param1param2显然是参数到该构造函数。

答案 1 :(得分:1)

你有几种方法:

struct P
{
    P(int a, int b) :a(a), b(b){}

    int a;
    int b;
};

struct S
{
    S() : p1(4, 2) {} // initializer list

    P p1;
    P p2{4, 2}; // since c++11
    P p3 = P(4, 2); // since c++11
};

答案 2 :(得分:0)

据我了解,问题是MyFunction只有一个只接受两个参数的构造函数。

您可以使用指向该对象的指针,然后在构造函数中初始化它:

#include <memory>

class Something {
    public:
        std::shared_ptr<MyFunction> data;
        Something(int par1, int par2) {
            data = std::shared_ptr<MyFunction>(new MyFunction(par1, par2)); // here you go!
        }

        ~Something() {
            //delete data; no need to do this now
        }
};

编辑添加了智能指针,以遵循三条规则。

答案 3 :(得分:0)

一个选项是预先声明和指向类的指针。

classA.h
class A
{
    public:
    A(a,b);
};

classB.h
class A;
class B{
    public:
    A* foo;
    B();
    ~B();
}

classB.cpp
#include classA.h
#include classB.h
B()
{
    foo=new A(a,b);
}
~B()
{
    delete(foo);
}