c++友元详解
来源:互联网 发布:js颜色值 编辑:程序博客网 时间:2024/03/29 03:51
近日重新看了一下C++友元,有了新的理解,如有理解有偏差,请指出,不胜感激!
我们知道,类的三大特性:封装、继承、多态。类具有隐藏内部实现细节的特性,仅暴露出接口给用户使用,但有时候我们也赋予某个函数(成员或非成员)或某个类访问非公有成员或函数的权利,这个正是友元存在的意义!
关于“友元”,可能你觉得这两个字比较抽象,你就理解有“朋友”好了。比如说,你允许让某个朋友去你家(访问类的非公有成员),你就告诉阿汪“阿汪,这是我“朋友”,可以让他进来,其他人还是要吠他!”。
使用起来也不复杂,只要把需要赋予访问特权的函数(成员或非成员)或类的放到需要被访问的类里面声明就可以了。至于放到public、protected、private,那个都没关系。
友元分为两种:友元函数和友元类
1. 友元函数:
(1)非成员函数作为友元函数:
//abc.h
class CSum
{
friend int add(CSum sum); //友元函数
public:
CSum(int x, int y){m_x = x;m_y = y;}
private:
void print(){}
int m_x;
int m_y;
};
//abc.cpp
int add(CSum sum)
{
return sum.m_x + sum.m_y;
}
(2)成员函数作为友元函数:
//abc.h
class CSum;
class CPrintSum
{
public:
void printSum(CSum sum);
};
class CSum
{
friend void CPrintSum::printSum(CPrintSumsum); //成员函数作为友元函数
public:
CSum(int x, int y){m_x = x;m_y = y;}
private:
int m_x;
int m_y;
};
//abc.c
void CPrintSum::printSum( CSum sum )
{
std::cout<<sum.m_x<<" " << sum.m_y;
}
2. 友元类
如果想某个类的所有成员函数都能访问另一个类的非公有成有,友元类就用上了!当然,你不觉得累的话也可以使用“成员函数作为友元函数”,一个个的声明。
//abc.h
class CPrintSum
{
public:
void printX(CSum sum);
void printY(CSum sum);
void printSum(CSum sum);
};
class CSum
{
friend class CPrintSum;
public:
CSum(int x, int y){m_x = x;m_y = y;}
private:
int m_x;
int m_y;
};
//abc.c
void CPrintSum::printX( CSum sum )
{
std::cout<<sum.m_x;
}
void CPrintSum::printY( CSum sum )
{
std::cout<<sum.m_y;
}
void CPrintSum::printSum( CSum sum )
{
std::cout<<sum.m_x<<" " << sum.m_y;
}
一个friend class CPrintSum,三个成员函数都搞定!
- [c++] 友元详解
- 实例详解C++友元
- C++: 友元函数和友元类详解
- 详解C++友元
- c++友元详解
- 友元详解
- c++友元详解
- 友元详解
- C++友元详解
- 友元详解
- C++友元详解
- C++(一)友元
- [C++]友元学习
- [c++]友元函数
- 【C++】友元函数
- c++:友元函数
- C++:友元函数
- C++:友元
- C++学习
- 三字符组与双字符组
- Eclipse的快捷键
- 好的文章
- Java读取文件大全
- c++友元详解
- 字符串的匹配
- 有关IP子网划分的内容
- Android 图像异步加载之Android-Universal-Image-Loader
- apache kafka监控系列-KafkaOffsetMonitor
- 华为oj之火车出站
- Android 触屏事件 OnTouch onClick onTouchEvent对于触屏事件的处理和分发
- 【Android SDK程序逆向分析与破解系列】之一:Android安装程序APK分析
- 常用验证正则表达式集