C++ 访问限定符
目录
访问修饰符概述
在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
来访问私有成员变量并输出其值。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!