在类声明中,为什么构造函数中的参数与私有部分中定义的变量具有相同的名称?

时间:2014-03-16 22:33:57

标签: c++ class constructor declaration

我希望我的问题很清楚...... 如果我们有

    Class A
    {
    public: 
        A(); //default constructor
        A(int new_a, string new_b);
    private:
        int a;string b;
    };

(很抱歉,我是堆叠溢出的新手,我的格式可能很糟糕。)

Aren&#t; t" new_a"和" new_b"在私人部分中表示a和b的东西? 为什么我们不同的名字给他们..?

感谢您的回答!

2 个答案:

答案 0 :(得分:3)

您可以按以下方式声明构造函数

Class A
{
public: 
    A(); //default constructor
    A( int a, string b);
private:
    int a;string b;
};

根据C ++标准

  

在函数声明中,或在除。之外的任何函数声明符中   函数定义的声明者(8.4),参数名称(如果   供应)具有功能原型范围,最终终止   最近的封闭函数声明符

因此,成员函数参数可以与该类的私有数据成员具有相同的名称。 您还可以通过以下方式定义构造函数

A::A( int a, string b) : a( a ), b( b ) {}

A::A( int a, string b){ A::a = a; A::b = b; }

A::A( int a, string b){ this->a = a; this->b = b; }

答案 1 :(得分:0)

它们可以具有相同的名称。但是当你这样做时,你必须在构造函数体内使用相同名称的参数消除歧义。