【C++】【学习笔记】【020】友元
来源:互联网 发布:电脑上淘宝怎么看直播 编辑:程序博客网 时间:2024/05/07 23:53
1、有些时候,一个完全无关的类由于某些特殊的原因需要访问某个protected成员,甚至某个private成员,这就引入了友元的概念;
2、友元关系是类之间的一种特殊关系,这种关系不仅允许友元类访问对方的public方法和属性,还允许友元访问对方的protected和private方法和属性;
3、声明一个友元关系的语法很简单,只要在类声明里的某个地方加上friend class **就行了,这条语句可以放在任何地方,放在public、protected、private段落里都可以;
样例:友元使用方法
#include <iostream>#include <string>// 友元用法示例class Lovers{public: Lovers(std::string theName); void kiss(Lovers *lover); void ask(Lovers *lover, std::string something);protected: std::string name; friend class Others; // 交友不慎};Lovers::Lovers(std::string theName){ name = theName;}void Lovers::kiss(Lovers *lover){ std::cout << name << " Lovers::kiss() " << lover->name << std::endl;}void Lovers::ask(Lovers *lover, std::string something){ std::cout << name << " Lovers::ask() " << lover->name << something << std::endl;}class Boyfriend : public Lovers{public: Boyfriend(std::string theName);};Boyfriend::Boyfriend(std::string theName) : Lovers(theName){}class Girlfriend : public Lovers{public: Girlfriend(std::string theName);};Girlfriend::Girlfriend(std::string theName) : Lovers(theName){}class Others{public: Others(std::string theName); void kiss2(Lovers *lover);protected: std::string name;};Others::Others(std::string theName){ name = theName;}void Others::kiss2(Lovers *lover){ std::cout << name << " Others::kiss2() " << lover->name << std::endl;}int main(){ Boyfriend boyfriend("BOY"); Girlfriend girlfriend("GIRL"); Others others("OTHER"); girlfriend.kiss(&boyfriend); girlfriend.ask(&boyfriend, " Wash clothes."); std::cout << "OTHER is coming." << std::endl; others.kiss2(&girlfriend); return 0;}
输出:GIRL Lovers::kiss() BOYGIRL Lovers::ask() BOY Wash clothes.OTHER is coming.OTHER Others::kiss2() GIRL
0 0
- 【C++】【学习笔记】【020】友元
- [C++]友元学习
- 【C++】学习笔记五十二——友元
- Thinkcpp 学习笔记 友元
- C++学习笔记--友元
- C++友元学习笔记
- C++Primer学习笔记(使用类,友元,类转换)
- C++ Primer 学习笔记 — 友元
- c++学习笔记之友元
- [C++学习笔记]--友元、this指针
- C++学习笔记-友元理论详解
- 一.C++学习笔记-友元
- C++之友元学习笔记
- C++学习笔记--尴尬友元
- java 元注释学习笔记
- 文献资料元数据学习笔记
- 享元模式---学习笔记
- 学习笔记:享元模式
- poj3030
- poj3077
- java排序(数组)常用排序总结
- 使用NSCondition实现多线程同步
- poj3094
- 【C++】【学习笔记】【020】友元
- POJ 3096
- 读《黑客与画家》有感
- python 计算执行时间
- OC语言中的继承
- POJ 3100
- 15款值得学习的小型开源项目(github)
- POJ 3117
- SQL中Group By的使用