C++類作用域詳解
C++類作用域是指類定義({} 內(nèi))所創(chuàng)建的獨立命名空間,其中聲明的成員(變量、函數(shù)、類型別名等)僅在類內(nèi)或通過作用域解析符 ::、對象/指針訪問時可見。
- 類作用域始于
{,止于},所有成員(無論public/private/protected)都位于此作用域內(nèi),作用域 ≠ 訪問權(quán)限:即使private成員在作用域內(nèi)可見,外部仍因權(quán)限限制無法訪問。 - 類外定義成員函數(shù)時必須用
::指定所屬類(如void Stack::Init()),否則編譯器視為全局函數(shù),導(dǎo)致名稱查找失敗。 - 成員函數(shù)體內(nèi)可直接訪問類內(nèi)任意成員(含私有),編譯器按“局部作用域 → 類作用域 → 外圍作用域”順序查找名稱;若與外部同名,可用
::顯式指定全局或類作用域(如::x或this->x)。 - 不同類可含同名成員而不沖突(如
A::func()和B::func()),因類提供命名隔離;但嵌套類、靜態(tài)成員仍屬外層類作用域的一部分。 - 類作用域不影響生命周期,僅影響編譯期名稱解析;對象構(gòu)造/析構(gòu)決定成員變量生存期,與作用域無關(guān)。
類作用域是 C++ 封裝與命名管理的基礎(chǔ),配合訪問限定符(public/private/protected)實現(xiàn)接口控制,但二者本質(zhì)不同:作用域決定“能否看到名字”,訪問控制決定“能否使用名字”。
C++ 類作用域(class scope)
簡單說:類里面定義的成員(變量、函數(shù)),都屬于類作用域,只能在類內(nèi)/通過對象/類名訪問。
一、什么是類作用域
在 class { ... } 大括號內(nèi)部的所有:
- 成員變量(屬性)
- 成員函數(shù)(方法)
- 類型別名、枚舉、靜態(tài)成員
都處在類作用域,外部不能直接訪問。
class Person {
public:
int age; // 類作用域
void show(); // 類作用域
};
// age、show 不能直接用,必須通過對象/類名
二、訪問規(guī)則(3種方式)
1. 類內(nèi)成員函數(shù):直接訪問
成員函數(shù)天然在類作用域內(nèi),直接用成員名
class Person {
public:
int age = 18;
void print() {
cout << age; // 直接訪問,不用對象
}
};
2. 類外普通函數(shù):必須用./->
Person p; p.age = 20; p.print();
3. 靜態(tài)成員:用類名::
class Person {
public:
static int num;
};
int Person::num = 100; // 類外初始化
Person::num = 200; // 類作用域訪問符 ::
三、作用域分辨符::(重點)
類名::成員名 專門用來訪問類作用域的成員
- 類外定義成員函數(shù)
- 訪問靜態(tài)成員
- 解決名字沖突
class Person {
public:
void show();
};
// 類外實現(xiàn),必須加 Person::
void Person::show() {
cout << "hello";
}
四、類作用域 vs 局部作用域 vs 全局作用域
- 全局作用域:函數(shù)外面,整個文件可用
- 局部作用域:函數(shù)/代碼塊
{}內(nèi),僅內(nèi)部可用 - 類作用域:class 內(nèi)部,必須通過對象/類名訪問
名字查找優(yōu)先級(從近到遠)
局部 > 類作用域 > 全局
int a = 100; // 全局
class A {
public:
int a = 20; // 類作用域
void f() {
int a = 5; // 局部
cout << a; // 輸出5,優(yōu)先局部
}
};
- 想訪問類內(nèi)的a:
this->a - 想訪問全局的a:
::a
五、this 指針與類作用域
成員函數(shù)里,this 代表當(dāng)前對象,強制指定類作用域的成員,避免局部變量屏蔽
void setAge(int age) {
this->age = age;
// this->age 是類成員,age是形參
}六、訪問控制(和類作用域配套)
類作用域分3種訪問權(quán)限:
public:外部可訪問private:僅類內(nèi)可訪問(默認(rèn))protected:類內(nèi) + 子類可訪問
極簡總結(jié)(必背)
- 類作用域:class 大括號內(nèi),成員必須通過對象或
類名::訪問 - :::作用域解析符,訪問類成員、靜態(tài)成員
- 名字查找:局部 > 類 > 全局
this->可顯式訪問類成員,防止被局部變量覆蓋
到此這篇關(guān)于C++類作用域的文章就介紹到這了,更多相關(guān)C++類作用域內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用VC6.0對C語言程序進行調(diào)試的基本手段分享
這篇文章主要介紹了用VC6.0開發(fā)c語言程序的時候調(diào)試代碼的一些小技巧,需要的朋友可以參考下2013-07-07
C++ Cmake的構(gòu)建靜態(tài)庫和動態(tài)庫詳解
這篇文章主要為大家詳細介紹了C++ Cmake的構(gòu)建靜態(tài)庫和動態(tài)庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03
Visual Studio Code 2020安裝教程及CPP環(huán)境配置(教程圖解)
這篇文章主要介紹了Visual Studio Code 2020安裝教程、CPP環(huán)境配置,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03

