在C++语法中有一个叫做友元函数,类的好朋友,好到可以直接访问和修改类的私有成员.C++这样设计虽然提供了另外一种方式来访问和修改类的私有成员,但是也破坏面向对象设计的封装这个原则.友元函数的特性决定 了友元函数的一个重要的应用—-(操作符重载,见后面的博客)
一,友元函数的定义和性质
1,友元函数需要在类中使用friend关键字进行声明, 声明在public,private,protected域都是一样的.如:
friend void setFriendA(FriendFunc *p , int a);
2,友元函数是一个全局函数,并非属于类.需要对其实现添加方法体
void setFriendA(FriendFunc *p , int a){
p->a = a;
}
二,示例代码
代码如下:
// 友元函数.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include"iostream"
using namespace std;
class FriendFunc{
public:
FriendFunc(int a){
this->a = a;
}
friend void setFriendA(FriendFunc *p , int a);
void printA(){
cout << "a = " << a << endl;
}
private:
int a;
};
void setFriendA(FriendFunc *p , int a){
p->a = a;
}
int _tmain(int argc, _TCHAR* argv[])
{
FriendFunc a(1);
a.printA();
setFriendA(&a, 100);
a.printA();
return 0;
}