序:
1、初学c++,理解阶段,一下为个人理解和案例,陆续更新
一、友元函数和普通函数区别
类的友元函数是函数,但是他可以调用类的私有变量,以下代码,Fun2是报错的,因为这个函数跟A没任何关系,但是缺想掉A的私有变量。
#include <iostream>
#include <windows.h>
using namespace std;
//先声明两个类
class A;
class B;
//定义类 A
class A{
private:
int x=1;
public:
friend int FUN1(A a);
};
int FUN1(A a){
return a.x;
}
int Fun2(A a){
return a.x;//注释掉,不然会报错!!!!!!!!!!!!!!!!!
}
// 程序的主函数
int main()
{
SetConsoleOutputCP(65001);
A a;
int s=FUN1(a);
cout << s;
return 0;
}
二、博主以为他的作用还是在多个类之间操作,前面那个案例已经说了,普通函数不能直接访问类的私有变量,现在我有一个场景,我要两个类的私有(private)变量相加,
#include <iostream>
#include <windows.h>
using namespace std;
//先声明两个类
class A;
class B;
//定义类 A
class A{
private:
int x=1;
public:
friend int FUN1(A a,B b);
};
//定义类 B
class B{
private:
int x=2;
public:
friend int FUN1(A a,B b);
};
int FUN1(A a,B b){
return a.x+b.x;
}
// 程序的主函数
int main()
{
SetConsoleOutputCP(65001);
A a;
B b;
int addVal=FUN1(a,b);
cout << addVal;
return 0;
}
看明白了吗,他的应用场景 博主以为应该是 适用于多类之间的运算封装成函数,你总不能在main写一大堆逻辑代码吧。当然应用场景很少,如果变量都是public之类的 也是用不着 这个友元。
二、说说和类成员函数区别把
看下面的代码
#include <iostream>
#include <windows.h>
using namespace std;
//先声明两个类
class A;
class B;
//定义类 A
class A{
private:
int x=1;
public:
friend int FUN1(A a);
int FUN2();
};
int A::FUN2(){
return x;
}
int FUN1(A a){
return a.x;
}
// 程序的主函数
int main()
{
SetConsoleOutputCP(65001);
A a;
cout <<FUN1(a)<<endl;
cout <<a.FUN2()<<endl;
}
一个调用是FUN1(a),一个是 a.FUN2()
再一个,因为友元函数内没有 this,而类成员函数内有 this所以友元函数只能是a.x,那你就得传a这个变量名,而类成员不需要传直接就是x;