目錄
訪問修飾符概述
protected在類的內部和派生類中訪問調用
private在類的內部訪問和調用
訪問修飾符概述
在C++中,有三個主要的訪問修飾符:public、private和protected。這些修飾符用于控制類的成員(變量和函數)的訪問權限。
-
public:
- 用public修飾的成員可以在類內部、類外部以及派生類中進行訪問。
- public成員對外部是可見的,可以直接訪問。
- 公共成員通常用于提供接口和公開的數據成員。
-
private:
- 用private修飾的成員只能在類內部進行訪問。
- private成員對外部是不可見的,無法直接訪問。
- 私有成員通常用于實現類的內部細節和私有數據成員。
-
protected:
- 用protected修飾的成員可以在類內部以及派生類中進行訪問。
- protected成員對外部是不可見的,無法直接訪問。
- 保護成員主要用于派生類繼承和訪問基類的成員。
這些訪問修飾符的使用可以幫助我們控制類的接口和實現的可見性,從而實現封裝性和繼承性的概念。
class MyClass {
public:int publicVar; // 公有成員變量void publicFunc() { // 公有成員函數// 函數體}private:int privateVar; // 私有成員變量void privateFunc() { // 私有成員函數// 函數體}protected:int protectedVar; // 保護成員變量void protectedFunc() { // 保護成員函數// 函數體}
};int main() {MyClass obj;obj.publicVar = 10; // 可以訪問公有成員變量obj.publicFunc(); // 可以調用公有成員函數// obj.privateVar = 20; // 錯誤,無法訪問私有成員變量// obj.privateFunc(); // 錯誤,無法調用私有成員函數// obj.protectedVar = 30; // 錯誤,無法訪問保護成員變量// obj.protectedFunc(); // 錯誤,無法調用保護成員函數return 0;
}
-
public
:公有訪問限定符,被聲明為public
的成員可以在類的內部和外部被訪問。在上面的示例中,publicVar
和publicFunc
被聲明為公有成員,可以在類的內部和外部訪問和調用。 -
private
:私有訪問限定符,被聲明為private
的成員只能在類的內部訪問,外部無法直接訪問。在上面的示例中,privateVar
和privateFunc
被聲明為私有成員,只能在類的內部訪問和調用。 -
protected
:保護訪問限定符,被聲明為protected
的成員可以在類的內部訪問,同時在派生類中也可以訪問。在上面的示例中,protectedVar
和protectedFunc
被聲明為保護成員,只能在類的內部和派生類中訪問和調用。
需要注意的是,訪問限定符僅用于類的成員,不影響類的對象。在類的對象中,無論是公有、私有還是保護成員,都可以通過對象訪問符.
或指針訪問符->
來訪問。在示例代碼中,obj.publicVar
可以訪問公有成員變量,obj.publicFunc()
可以調用公有成員函數。但是,私有和保護成員在對象外部是無法直接訪問的。
protected在類的內部和派生類中訪問調用
當成員被聲明為protected
時,它們可以在類的內部和派生類中進行訪問和調用。下面是一個使用protected
訪問限定符的示例代碼:
#include <iostream>class Base {
protected:int protectedVar;public:void setProtectedVar(int value) {protectedVar = value;}
};class Derived : public Base {
public:void accessProtectedVar() {protectedVar = 10; // 在派生類中可以直接訪問和修改基類的protected成員變量}void accessBaseMember() {setProtectedVar(20); // 在派生類中可以調用基類的公有成員函數來間接訪問和修改protected成員變量}
};int main() {Derived d;d.accessProtectedVar(); // 在派生類對象中訪問protected成員變量d.accessBaseMember(); // 在派生類對象中訪問和修改protected成員變量return 0;
}
在上述代碼中,Base
類中的protectedVar
被聲明為protected
,表示它可以在類的內部和派生類中進行訪問。Derived
類繼承自Base
類,并能夠訪問和修改基類的protectedVar
成員變量。
在Derived
類中的accessProtectedVar
函數中,可以直接使用protectedVar
來訪問和修改基類的protected
成員變量。
在accessBaseMember
函數中,通過調用基類的公有成員函數setProtectedVar
來間接訪問和修改基類的protected
成員變量。
通過在派生類中訪問和修改基類的protected
成員,可以實現對基類成員的擴展和定制。
private在類的內部訪問和調用
當成員被聲明為private
時,它們只能在類的內部進行訪問和調用,無法在類的外部或派生類中直接訪問。下面是一個使用private
訪問限定符的示例代碼:
#include <iostream>class MyClass {
private:int privateVar;public:void setPrivateVar(int value) {privateVar = value;}void accessPrivateVar() {std::cout << "Accessing privateVar: " << privateVar << std::endl;}
};int main() {MyClass obj;obj.setPrivateVar(10); // 在類的內部調用公有成員函數來修改私有成員變量obj.accessPrivateVar(); // 在類的內部調用公有成員函數來訪問私有成員變量// obj.privateVar = 20; // 錯誤,無法在類的外部直接訪問私有成員變量return 0;
}
在上述代碼中,MyClass
類中的privateVar
被聲明為private
,表示它只能在類的內部進行訪問。在MyClass
類中,我們定義了setPrivateVar
函數來間接修改私有成員變量,以及accessPrivateVar
函數來訪問私有成員變量。
在main
函數中,我們創建了MyClass
類的對象obj
,并通過調用公有成員函數setPrivateVar
來修改私有成員變量privateVar
的值。然后,通過調用公有成員函數accessPrivateVar
來訪問私有成員變量并輸出其值。