你看上面的代碼定義一類,但最初只聲明成員函數(然後定義他們只是事後)。我只提到這一點,因爲術語對有效溝通很重要。
如果你定義的類成員在線,那麼你不使用範圍解析操作::
,例如:
class cls {
void hello() { cout << "Hello world"; }
};
如果單獨定義它們,那麼你做需要它,否則編譯器不能確切地知道你打算定義什麼功能:
class cls {
void hello();
};
void cls::hello() { cout << "Hello world"; };
一般來說,範圍解析運算符的使用爲n不限於使用名稱空間;只要需要向編譯器提供標準名稱,就可以使用它。
在大多數情況下從類作用域內訪問類成員時,可以使用它們的非限定名稱;編譯器將自行解決它們。因此,例如,在代碼中所有這些都是等價的:
x++;
cls::x++;
this->x++;
this->cls::x++; // yes, this too
您需要限定,只要有名稱相同的多個成員的姓名和編譯器解析不合格的名稱比你預期的成員以外的東西。實例:
void cls::foo(int x) {
x++; // increments the argument
cls::x++; // increments the member
this->x++; // also increments the member
}
考慮也是cls
可以從base
派生,並且base
還可以限定一個x
。在這種情況下,它的工作原理是這樣的:
void cls::foo() {
x++; // increments foo::x
cls::x++; // increments foo::x
base::x++; // increments base::x
}
來源
2013-05-10 13:12:59
Jon
在'x'等成員變量的名稱前加上'm_'(即'm_x')通常是比較常見的。這有助於將局部變量與類成員區分開來,從而消除了爲什麼您可能希望以類名 – 2013-05-10 13:20:14