我在C ++中使用参数化构造函数有一些理解问题。 如果我有一个带有一个构造函数的类,它有两个函数参数,我怎样才能在其他类头文件中实例化它?
例如:
public:
MyFunction myfunction(param1, param2); //makes an error
我如何声明这样的对象?
答案 0 :(得分:3)
您需要在类声明中编写MyFunction myfunction;
。
然后在构造函数的成员初始化列表中,myfunction
是其成员的类,写
/*Your constructor here*/ : myfunction(param1, param2)
{
/*the constructor body*/
}
冒号后面的位是成员初始化列表。 param1
和param2
显然是参数到该构造函数。
答案 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);
}