目录
访问修饰符概述
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
来访问私有成员变量并输出其值。