我有以下代码,并希望为param3提供默认值。我已经尝试了各种尝试,并且编译器的错误信息似乎在类非int初始化中是不允许的。 这是一种不好的做法,为什么?从面向对象的角度来看,更好的方法是什么? 感谢
struct MyStruct
{
int a;
int b;
};
class myClass {
public:
void init(int param1 = 0, int param2 = 0, MyStruct param3);
}
答案 0 :(得分:1)
您可以添加构造函数和默认构造函数MyStruct
并创建一个常量默认值,如下所示:
struct MyStruct {
int a;
int b;
MyStruct(int x, int y):a(x), b(y) {} // Constrctor.
MyStruct():a(0), b(0) {} // Default constrctor.
};
const MyStruct default_(3, 4); // for instance here by default a == 3 and b == 4
class myClass {
public:
void init(int param1 = 0, int param2 = 0, MyStruct param3 = default_);
};
答案 1 :(得分:0)
以下内容适用(至少使用C ++ 11):
void init(int param1 = 0, int param2 = 0, MyStruct param3 = MyStruct{ 2, 3 });
答案 2 :(得分:0)
解决这样的问题最简单,最简单的方法可能就是这样做:
class myClass {
public:
void init(int p1 = 0, int p2 = 0)
{
MyStruct s; //initialize this to whatever default values
init(p1, p2, s);
}
void init(int p1, int p2, MyStruct p3);
}
答案 3 :(得分:0)
这将在C ++ 0x中工作。
struct MyStruct
{
int a;
int b;
};
function foo(int a, structure s = structure{10,20})
{
//Code
}