C++基础---友元
来源:互联网 发布:火狐浏览器打不开淘宝 编辑:程序博客网 时间:2024/05/19 04:06
友元概念
友元函数
定义:
friend<数据类型><友元函数名>(参数列表)
#include<iostream>using namespace std;//定义友元函数class Rectangle{private: double length; double width;public: Rectangle(double l,double w):length(l),width(w){} friend double area(Rectangle &Rec); //定义友元};//友元实现double area(Rectangle &Rec){ return Rec.length*Rec.width;}int main(){ Rectangle Rect(12.0,2.1); cout<<"The area is "<<area(Rect); return 0;}
友元成员
#include<iostream>#include<string.h>using namespace std;class Boy; //提起声明class Girl{private: char *name; int age;public: Girl(char *n,int num); void display(Boy &boy); ~Girl();}; Girl::Girl(char *n,int num) { name = new char[strlen(n)+1]; strcpy(name ,n); age = num; } Girl::~Girl() { delete name; }class Boy{private: char* name; int age;public: Boy(char *n,int a); friend void Girl::display(Boy &b); //声明友元函数 ~Boy();}; Boy::Boy(char *n,int num) { name = new char[strlen(n)+1]; strcpy(name ,n); age = num; } Boy:: ~Boy() { delete name; }void Girl::display(Boy &b){ cout<<"Girl\'s name: "<<name <<" age :"<<age<<endl; cout<<"Boy\'s name: "<<b.name <<" age :"<<b.age<<endl;}int main(){ Girl g("helinqian",28); Boy b("yuanqianqian",27); g.display(b); return 0;}
友元类
友元类一般形式:
friend class<友元类名>
using namespace std;class Boy; //提起声明class Girl{private: char *name; int age;public: Girl(char *n,int num); void display(Boy &boy); ~Girl();}; Girl::Girl(char *n,int num) { name = new char[strlen(n)+1]; strcpy(name ,n); age = num; } Girl::~Girl() { delete name; }class Boy{private: char* name; int age;public: Boy(char *n,int a); friend class Girl; //声明类girl是类boy的友元函数 ~Boy();}; Boy::Boy(char *n,int num) { name = new char[strlen(n)+1]; strcpy(name ,n); age = num; } Boy:: ~Boy() { delete name; }void Girl::display(Boy &b){ cout<<"Girl\'s name: "<<name <<" age :"<<age<<endl; cout<<"Boy\'s name: "<<b.name <<" age :"<<b.age<<endl;}int main(){ Girl g("helinqian",28); Boy b("yuanqianqian",27); g.display(b); return 0;}
注意事项:
友元关系不能被继承。
友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明
友元可以访问类的私有成员。
只能出现在类定义内部,友元声明可以在类中的任何地方,一般放在类定义的开始或结尾。
友元可以是普通的非成员函数,或前面定义的其他类的成员函数,或整个类。
类必须将重载函数集中每一个希望设为友元的函数都声明为友元。
友元关系不能继承,基类的友元对派生类的成员没有特殊的访问权限。如果基类被授予友元关系,则只有基类具有特殊的访问权限。该基类的派生类不能访问授予友元关系的类。
友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明
友元可以访问类的私有成员。
只能出现在类定义内部,友元声明可以在类中的任何地方,一般放在类定义的开始或结尾。
友元可以是普通的非成员函数,或前面定义的其他类的成员函数,或整个类。
类必须将重载函数集中每一个希望设为友元的函数都声明为友元。
友元关系不能继承,基类的友元对派生类的成员没有特殊的访问权限。如果基类被授予友元关系,则只有基类具有特殊的访问权限。该基类的派生类不能访问授予友元关系的类。
阅读全文
0 0
- c/c++基础(十九) 友元
- C++基础--友元
- 【Linux基础】友元
- C++基础:友元
- C++基础---友元
- C#_基础概念_元组
- C++(一)友元
- [C++]友元学习
- [c++]友元函数
- [c++] 友元详解
- 【C++】友元函数
- c++:友元函数
- C++:友元函数
- C++:友元
- C/C++ 友元
- 【C++】友元函数
- C++:友元
- C++----友元
- 一个简单粗暴的屏幕适配
- POJ-2387-Til the Cows Come Home [最短路]
- 面试相关
- 【LEDE】树莓派上玩LEDE终极指南-99-编译psutil,安装thefuck
- Excel常见神器的另类新解 “条件格式”OR“自定义数字格式”
- C++基础---友元
- camera2 (api2)打开预览过程(二)
- JVM(Java虚拟机)优化大全和案例实战
- android使用fir.im实现版本更新
- SSL验证时,CSR文件的生成
- 通过ftp上传文件到指定服务器
- Number of 1 Bits
- [数算] 研究了一天的《N个球放M个盒子问题》~~~~~~~~~~~~8种情况全部用公式解决 [复制链接]
- 线程