c++:权限访问控制关键字public/protected/private
·
概述
c++ 使用public、protected、private三个关键字来控制类的成员变量、成员函数的访问权限(也可以称为可见性),它们三者的用法规则如下:
- public:被声明为public的成员变量、成员函数可以被类中成员函数、子类中的成员函数、友元函数、友元类、类的对象访问;
- protected:被声明为protected的成员变量、成员函数可以被类中成员函数、子类中的成员函数、友元函数、友元类访问,不能被类的对象访问;
- private:被声明为private的成员变量、成员函数可以被类中的成员函数、友元函数、友元类访问,不能被子类的成员函数、类/子类对象访问。
用法
#include <iostream>
using namespace std;
class Base
{
public:
int a = 1;
void fun1() {};
protected:
int b = 2;
void fun2() {};
private:
int c = 3;
void fun3() {};
friend void friendFun(Base b); // 定义一个Base类的友元函数
friend class FriendTest;
};
class SubBase : public Base
{
public:
void test()
{
cout << a << endl;
cout << b << endl;
// cout << c << endl; c是定义为private的变量无法访问,编译过不去
fun1();
fun2();
}
};
class FriendTest
{
/* 在友元类中可以访问Base类中的所有成员、函数 */
public:
void fun4(Base b)
{
cout << b.a << endl;
cout << b.b << endl;
cout << b.c << endl;
b.fun1();
b.fun2();
b.fun3();
}
};
void friendFun(Base b)
{
/* 在友元函数中可以访问Base类中的所有成员、函数 */
cout << b.a << endl;
cout << b.b << endl;
cout << b.c << endl;
b.fun1();
b.fun2();
b.fun3();
}
int main(void)
{
SubBase s;
s.test();
// cout << s.b << endl; b是定义为protected的变量,不能用变量去访问,编译过不去
s.fun1();
// s.fun2(); fun2是定义为protected的函数,不能用变量去访问,编译过不去
return 0;
}
总结
- 类本身和友元是可以访问声明为public、protected、private的所有成员函数和成员变量的;
- 访问控制关键字只有public、protected、private三种,如果没有声明,那么默认就是private;
- public、protected、private三种关键字可以在一个类中出现多次,其范围为从该关键字开始到下一个关键字开始,一般默认一种写一个就行。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)