友元语法
friend关键字只出现在声明处
其他类、类成员函数、全局函数都可声明为友元
友元函数不是类的成员,不带this指针
友元函数可访问对象任意成员属性,包括私有属性
友元类
friend class 类名
友元类 是单向,不可传递的
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> using namespace std; class House; //先声明,防止报错 class GoodGay { public: GoodGay(); //类内声明 void Visit(); //类内声明 House * h; }; class House { friend class GoodGay; //把好基友类添加为友元类 public: House(); //类内声明 string m_SittingRoom; private: string m_BedRoom; }; GoodGay::GoodGay() // 类外实现构造函数 好基友类的构造函数,创建House对象 { this->h = new House; } void GoodGay::Visit() //类外实现成员函数 注意 返回值要与声明的一致 { cout << "好基友正在访问:" << this->h->m_SittingRoom << endl; cout << "好基友正在访问:" << this->h->m_BedRoom << endl; } House::House() { this->m_SittingRoom = "客厅"; this->m_BedRoom = "卧室"; } void test() { GoodGay g; //调用GoodGay构造函数 g.Visit(); //访问Visit成员方法 } int main() { test(); system("Pause"); //阻塞功能 return EXIT_SUCCESS; // 返回正常退出 }
结果:
[友元类注意]
1.友元关系不能被继承。
2.友元关系是单向的,类A是类B的朋友,但类B不一定是类A的朋友。
3.友元关系不具有传递性。类B是类A的朋友,类C是类B的朋友,但类C不一定是类A的朋友。