C ++类构造函数的语法

时间:2014-01-19 01:18:25

标签: c++ class constructor

我不太确定我理解这个Person类的构造函数的语法。

class Person
{
    string _name;

public:
    Person(void) { _name = ""; }
    string Name(void) const;
};

AFAIK,一个下划线只是一个私人成员的指示,如果我错了请纠正我。我不太清楚其余代码的用途是什么。有两个公共成员,我假设它们本身都是方法。第一个语句允许使用Person的默认_name创建""。下一行的目的是什么,如果只是一种数据类型,它返回的是什么?何时以及如何使用?

3 个答案:

答案 0 :(得分:1)

  

AFAIK,下划线只是私人会员的指示

嗯,该语言不要求您在私人成员前加下划线。有些人将它作为惯例使用,但绝对不是标准。

  

有两个公共成员,我假设这些成员本身都是方法。

是的,一个是 default-contructor ,另一个是成员函数。两者都不需要void参数(因为我们没有使用C)。

  

第一个语句允许使用默认_name“”创建Person。

从技术上讲,第一个构造函数允许创建对象而不指定任何参数。那样:

Person sophie;

是有效的声明。在这种情况下,_name成员对象填充了一个“空”(让我们不要在空终止符上迂腐)字符串。

要注意隐式声明的默认 default-constructor 与上面类中声明的默认 default-constructor 完全相同(在本例中)。因此构造函数在这个特定的上下文中实际上是无用的(因为std::string的默认构造函数无论如何都会构造一个“空”字符串。)

  

下一行的目的是什么,如果只是一种数据类型,它返回的是什么?何时以及如何使用?

第二个成员函数返回string,我假设它是std::string(假设使用stdusing namespace std命名空间导入范围。从它的外观来看,它似乎是经典的“ getter ”成员函数,它将返回_name成员对象的副本。

答案 1 :(得分:0)

  

AFAIK,下划线只是私人会员的指示[...]

事实并非如此。下划线可以表示许多事情,而不仅仅是访问规范。它最终与代码作者所做的设计选择有关。私有变量不需要以下划线为前缀,但是当它们这样做时,可能是为了从其他数据成员中消除数据成员的特征歧义。在这种情况下,下划线前缀表示私有访问规范。

  

下一行的目的是什么,如果只是一种数据类型,它返回的是什么?

下一行是声明一个名为Name的函数,该函数不接受任何参数并返回类型为string的对象。此函数是const - 限定的,这意味着它不会修改*this的状态(除非数据成员被声明为mutable,然后它可以修改该变量)。

  

何时以及如何使用?

这是一个函数,意思是在定义之后,你可以调用它。从它的外观来看,它的定义可能与将私有数据成员_name返回给调用者一样简单。

答案 2 :(得分:0)

请注意,string Name(void) const;声明名为Name的函数,该函数返回string。此行 定义函数实际执行的操作。我假设您在此处发布的代码位于.h头文件中。 Name函数的代码很可能位于相应的.cpp文件中。