C++友元函数案例
来源:互联网 发布:联盟挂机软件下载 编辑:程序博客网 时间:2024/05/27 00:33
1.假如我们想比较两个对象中的数据成员是否想等:
不想把一些函数写在类里面,因为有可能此种类中有判断是否相等的函数,其他类中也有这样的函数,那就想把此种函数做成一个大家都可以用的函数,不需在每个类中定义;
#include <iostream>using namespace std;class Student{ int m_age; int m_num; public: Student(int age=0,int num=0):m_age(age),m_num(num){} //有参构造函数 friend void printInfo(Student &s); //友元函数printInfo(); friend bool isEqual(Student &s1,Student &s2); //友元函数isEqual();};void printInfo(Student &s) //此处不需要告诉别人属于哪个类 //传递的是引用{cout<<s.m_age<<"==="<<s.m_num<<endl;//在这里可以直接操作定义成员函数}bool isEqual(Student &s1,Student &s2) //此处传的是引用{return s1.m_age==s2.m_age&&s1.m_num==s2.m_num; // 判断两个成员里面的数据是否是相等的}void test(){Student s(1,20),s1(1,20); // 构造两个成员变量 printInfo(s); //这里调用也没有说明是属于哪个类bool res=isEqual(s,s1); //将两个对象传入函数cout<<res<<endl; }int main (int argc,char *argv[]){test0(); return 0;}
2.上面代码实现了比较两个对象中的数据大小,打印函数printInfo()和isEqual()函数都属友元函数,这样就不需要在每个类中都定义一个这样的函数了;
3下面分析一下友元函数相关问题:
1)友元函数的重要性:
当一个函数想直接访问类里面的private成员变量,必须要写一个接口(函数),就是将该函数写成该类的友元函数,可以提高访问效率
2)友元使用情况
运算符重载
3)友元函数分类
(1)普通函数(非类的成员函数)是友元函数 //上面讲的例子,就是普通函数的一个例子;
(2) 一个类里面的成员函数是另一个类里面的成员函数 //这个例子接下来就会讲到
(3)一个类是另外一个类的友元
4.友元的缺点
#includeusing namespace std;class A;class B{int m_num1,m_num2;public: B(int num1=0,int num2=0):m_num1(num1),m_num2(num2){} int sum(A &a);};class A{ int m_num; public: A(int num=0):m_num(num){} friend int B::sum(A &a); //b是a的友元类};int B::sum(A &a){ //那么就可以在B定义的函数再接操作A里面的内容return m_num1+a.m_num;}class Num;class Calculator{public:int sum(Num &n1,Num &n2);int minus(Num &n1,Num &n2);int multiply(Num &n1,Num &n2);};class Num{int m_num;public:Num(int num=0):m_num(num){} friend class Calculator;};int Calculator::sum(Num &n1,Num &n2){return n1.m_num+n2.m_num;}int Calculator::minus(Num &n1,Num &n2){ return n1.m_num-n2.m_num;}int Calculator::multiply(Num &n1,Num &n2){return n1.m_num*n2.m_num;}int main(){Num n1(10),n2(5);Calculator cal;cout< using namespace std;class Student {int m_score; public: Student(int score=0):m_score(score){}// void test();int operator+(Student &s) //operator标记符{return this->m_score+s.m_score;}Student & operator++()//(int) //++ 用成员函数{ ++this->m_score; return *this;}Student operator++(int)//(int) //后面价格int{ Student temp=*this; this->m_score++; return temp; //不能返回局部变量的引用} int getAge(){ return this->m_score;}friend int operator+(Student &s1,Student &s2) ; //operate标记符 friend ostream& operator<<(ostream &out,const Student &s ); friend istream& operator>>(istream &in,Student &s ); friend bool operator&&(const Student &s1,const Student &s2);friend bool operator!(const Student &s); friend bool operator==(const Student &s1,const Student &s2);}; ostream& operator<<(ostream &out,const Student &s ) //输出流重载 cout{out<<"score="< >(istream &in,Student &s ) //输入流重载 cin{ cout<<"score"; in>>s.m_score; return in;}int operator+(Student &s1,Student &s2) //加号重载 + //operator标记符 {return s1.m_score+s2.m_score;} bool operator==(const Student &s1,const Student &s2) //是否想等的引用 == {return s1.m_score==s2.m_score; } bool operator&&(const Student &s1,const Student &s2) //&&{return s1.m_score!=0 && s2.m_score!=0;} bool operator!(const Student &s) //!{ return !s.m_score;}int main(){Student s1(1),s2(2);cout<<"s1,s2相与"<<(s1&&s2)< >s; //输入操作符重载cout<
阅读全文
2 0
- C++友元函数案例
- [c++]友元函数
- 【C++】友元函数
- c++:友元函数
- C++:友元函数
- 【C++】友元函数
- C++_友元函数
- C++_友元函数
- C++_友元函数
- C++_友元函数
- C++_友元函数
- C++_友元函数
- 友元函数(C++)
- C++_友元函数
- C++_友元函数
- C++_友元函数
- C++_友元函数
- C++_友元函数
- 深度学习框架学习一
- java学习初探八之数组应用
- HOWTO INSTALL OWNCLOUD WITH NGINX IN UBUNTU LTS
- nor flash datasheet介绍
- Android 高德地图使用
- C++友元函数案例
- 考研数学
- Latex多处引用同一脚注
- 15 java在linux上jni的编程应用
- Atitit uke签名规范 与防伪鉴别 attilax总结
- 侧边栏导航布局的实现
- 异步复位同步释放
- Kali Linux Wine32英文字体不显示问题
- python3.6使用pickle序列化class