带声明帐户的C ++构造函数(int = 0);

时间:2017-12-01 23:41:25

标签: c++

class Act {

protected:

    string Owner;

    double Balance;
public:
    explicit Act(int = 0);

    double getBalance() { return Balance; };
};

构造函数行的含义是什么(int = 0);需要int = 0会在这里做什么。

2 个答案:

答案 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。