我不太确定我理解这个Person
类的构造函数的语法。
class Person
{
string _name;
public:
Person(void) { _name = ""; }
string Name(void) const;
};
AFAIK,一个下划线只是一个私人成员的指示,如果我错了请纠正我。我不太清楚其余代码的用途是什么。有两个公共成员,我假设它们本身都是方法。第一个语句允许使用Person
的默认_name
创建""
。下一行的目的是什么,如果只是一种数据类型,它返回的是什么?何时以及如何使用?
答案 0 :(得分:1)
AFAIK,下划线只是私人会员的指示
嗯,该语言不要求您在私人成员前加下划线。有些人将它作为惯例使用,但绝对不是标准。
有两个公共成员,我假设这些成员本身都是方法。
是的,一个是 default-contructor ,另一个是成员函数。两者都不需要void
参数(因为我们没有使用C)。
第一个语句允许使用默认_name“”创建Person。
从技术上讲,第一个构造函数允许创建对象而不指定任何参数。那样:
Person sophie;
是有效的声明。在这种情况下,_name
成员对象填充了一个“空”(让我们不要在空终止符上迂腐)字符串。
要注意隐式声明的默认 default-constructor 与上面类中声明的默认 default-constructor 完全相同(在本例中)。因此构造函数在这个特定的上下文中实际上是无用的(因为std::string
的默认构造函数无论如何都会构造一个“空”字符串。)
下一行的目的是什么,如果只是一种数据类型,它返回的是什么?何时以及如何使用?
第二个成员函数返回string
,我假设它是std::string
(假设使用std
将using namespace std
命名空间导入范围。从它的外观来看,它似乎是经典的“ getter ”成员函数,它将返回_name
成员对象的副本。
答案 1 :(得分:0)
AFAIK,下划线只是私人会员的指示[...]
事实并非如此。下划线可以表示许多事情,而不仅仅是访问规范。它最终与代码作者所做的设计选择有关。私有变量不需要以下划线为前缀,但是当它们这样做时,可能是为了从其他数据成员中消除数据成员的特征歧义。在这种情况下,下划线前缀表示私有访问规范。
下一行的目的是什么,如果只是一种数据类型,它返回的是什么?
下一行是声明一个名为Name
的函数,该函数不接受任何参数并返回类型为string
的对象。此函数是const
- 限定的,这意味着它不会修改*this
的状态(除非数据成员被声明为mutable
,然后它可以修改该变量)。
何时以及如何使用?
这是一个函数,意思是在定义之后,你可以调用它。从它的外观来看,它的定义可能与将私有数据成员_name
返回给调用者一样简单。
答案 2 :(得分:0)
请注意,string Name(void) const;
仅声明名为Name
的函数,该函数返回string
。此行不 定义函数实际执行的操作。我假设您在此处发布的代码位于.h头文件中。 Name
函数的代码很可能位于相应的.cpp文件中。