class Act {
protected:
string Owner;
double Balance;
public:
explicit Act(int = 0);
double getBalance() { return Balance; };
};
构造函数行的含义是什么(int = 0);需要int = 0会在这里做什么。
答案 0 :(得分:1)
<强>解释强>
explicit Act (int = 0);
定义一个构造函数,它从Act
参数构造int
。 =0
表示如果参数可以省略,则默认值为0. explicit
关键字告诉编译器不要使用此构造函数进行隐式转换。
使用示例
原样:
Act a1; // Will generate the same code as Act a1(0);
Act a5{}; // Same as above, but using the braced initialization
Act a2(12); // Obvious
Act a3=13; // Ouch ! Compiler error because of explicit
Act a4 = Act(13); // Ok, because now the call is explicit
如果你没有明确的关键字,那么这一行就没问题了
Act a3=13; // If not explicit, this is the same than Act a3=Act(13);
重要评论
默认值不是构造函数本身的一部分,而是基于调用者已知的构造函数的声明在调用者端定义的行为。
这意味着您可以在不同的编译单元中包含声明具有不同默认值的类。虽然很奇怪,但这完全有效。
请注意,声明中缺少参数名称也不是问题,因为参数名称可以在构造函数定义中声明:
Act::Act(int x) : Balance((double)x) {
cout <<"Constructor Act with parameter "<<x<<endl;
}
最后,请注意,如果要通过省略参数来使用默认值,但是构造函数只有一个参数,则应使用上面示例中的语法形式a1或a5。但是,您不应该使用带有空括号的语法,因为这将被理解为函数声明:
Act a0(); // Ouch !! function declaration ! Use a0 or a0{} instead.
答案 1 :(得分:0)
为了解决你的问题,我们必须细分这行。
该行调用类Act
的构造函数,没有变量名的int要求构造函数采用int。但是=0
部分是默认参数,告诉构造函数你不需要int只是在那里放置0。