您在代码中使用的两种语法(this->...
和限定名称)仅在存在歧义或其他名称查找问题时才需要,例如名称隐藏、模板基类等。
当没有歧义或其他问题时,您不需要任何这些语法。您只需要一个简单的非限定名称,就像Write
您的示例中一样。只是Write
,不是this->Write
,不是Foundation::Write
。这同样适用于mWords
。
即在你的具体例子中,一个普通的Write( mWords )
就可以了。
为了说明上述情况,如果您的DoSomething
方法有mWords
参数,如
DoSomething(int mWords) {
...
那么这个本地mWords
参数将隐藏继承的类成员mWords
,你必须使用
DoSomething(int mWords) {
Write(this->mWords);
}
或者
DoSomething(int mWords) {
Write(Foundation::mWords);
}
正确地表达你的意图,即突破隐藏。
如果您的Child
班级也有自己的mWords
成员,如
class Child : public Base, public Foundation
{
int mWords
...
那么这个名字会隐藏继承的mWords
. 这种情况下的this->mWords
方法不会帮助您取消隐藏专有名称,您必须使用限定名称来解决问题
DoSomething(int mWords) {
Write(Foundation::mWords);
}
如果您的两个基类都有一个mWords
成员,如
class Base {
public:
std::string mWords;
...
};
class Foundation {
public:
int mWords;
...
那么名字就会模棱两可Child::DoSomething
,mWords
你必须这样做
DoSomething(int mWords) {
Write(Foundation::mWords);
}
来解决歧义。
但是,同样,在您的具体示例中,没有歧义并且没有隐藏所有这些的名称是完全没有必要的。