标签:div 类的成员 null end 引用 private asp 引用计数 控制
1.友元
1.1可以访问所有成员(公有,私有)
2.1友元不是类的成员,也不受它所在区域访问控制级别的约束
2.2普通函数,类的成员函数,整个类都可以声明为友元
2.3友元破坏了封装性,不到万不得已不要用
2.4运算符重载时适合用友元
class HasPtr;//前向声明 class Test { public: void Test1();//不能在此处写创建HasPtr对象的函数实现,因为HasPtr尚未给出定义,编译器不清楚它的成员和size。 void Test2(); private: HasPtr *pointer;//指针或引用可以,即使HasPtr尚未给出定义 }; class HasPtr { friend void Test::Test1();//成员函数作为友元,Test类中其他未声明为友元的函数不能访问HasPtr的私有成员 //friend Test;//类作为友元,Test类中都能访问HasPtr的私有成员 friend int main();//声明main函数是友元 friend void Foo() {//类内部定义了友元,是全局函数,使用前需要再声明 HasPtr foo; foo.count = 99; } public: HasPtr(int *p = nullptr, int n = 0) :ptr(p), count(n) {} private: int *ptr; int count; }; void Test::Test1() {//此处有完整的HasPtr的定义了,可访问 HasPtr ptr; ptr.count = 0; } void Foo();//使用前需要再声明 int main() { HasPtr ptr; ptr.count = 124;//可以直接访问私有成员 Foo();//使用全局函数 return 0; }
标签:div 类的成员 null end 引用 private asp 引用计数 控制
原文地址:https://www.cnblogs.com/Nutshelln/p/12892712.html