【C++】访问控制
- public
- private
- protected
- friend
private变量是仅有类的成员函数可访问的变量
private函数是只能在当前类的成员函数内部调用的函数。
class A{
private:
int i;
int *p;
public:
A() {
p = 0;
cout << "A::A()" << endl;
}
~A() {
if ( p )
delete p;
cout << "A::~A()" << i << endl;
}
void set( int ii ) { i = ii }
void f() { p = new int; }
void g(A* q) { cout << "A::g(), q->i=" << q->i << endl; }
};
int main()
{
A*p = new A[10];
for( int i=0; i<10; i++ )
p[i].set(i);
A b;
b.set(100);
p[0].g(&b);
delete[] p;
return 0;
}
输出是:
A::A()
A::A()
A::A()
A::A()
A::A()
A::A()
A::A()
A::A()
A::A()
A::A()
A::g(), q->i=100
A::~A()9
A::~A()8
A::~A()7
A::~A()6
A::~A()5
A::~A()4
A::~A()3
A::~A()2
A::~A()1
A::~A()0
A::~A()100
我们p[0](是一个A对象)的g函数访问了b(同样也是一个A对象)里的i值: 同一个类的对象间是可以互相访问其私有的成员变量的(同一个类的不同对象互为友元)
更进一步的,private的权限仅在编译时刻
展开来说,其实整个c++的OOP特性都仅在源代码级别存在,也即内存中私有函数和公共函数没有区别,编译完后的 .o
文件与c语言的 .o
也没有区别,故只要有办法过了编译器,便可为所欲为。
friend
用于声明其他类、其他函数或其他类中的某个函数为当前类的friend,被声明为friend后可访问private
友元关系可以打破封装性,其允许其他类或函数直接访问私有成员。
因此,使用需谨慎,确保只在必要的情况下使用,其通常用于提供类之间的特殊访问权限,例如实现操作符重载、类之间的协作等情况。
friend限定在运算符重载时使用的比较多,且注意,friend的授权也是在编译时刻检查的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?