13友元函数好友元类
如果某个(些)外部函数需要直接访问类的数据成员,怎么办?
方法一:数据公有
方法二:友元
友元函数
1.友元函数是一般函数或其它类的成员函数
2.友元函数具有访问类的所有成员的权限
3.声明友元函数的方法:friend + 函数原型
4.除非能带来极大的便利,否则不要使用友元
示例:使用友元函数修改类的私有数据成员
//文件triangle.h
#if !defined __TRIANGLE__H__
#define __TRIANGLE__H__
class Triangle
{friend void setA(Triangle &t, int n);
public:
Triangle(int x = 5,
int y = 5, int z = 5);
void print();
private:
int a, b, c;
};
#endif
//文件triangle.cpp
#include "triangle.h"
#include <iostream.h>
Triangle::Triangle(int x, int y, int z)
{if (x+y>z && x+z>y && y+z>x)
{ a = x; b = y; c = z;}
else
{ a = b = c = 5; }
}
void Triangle::print( )
{cout<<"Triangle: "<<a<<", “
<< b <<", "<<c<<endl;
}
//文件ex12_5.cpp
#include "triangle.h"
void setA(Triangle &t, int n)
{t.a = n; //访问对象t的私有成员a
}
main()
{Triangle t;
t.print();
setA(t, 10);
t.print();
return 0;
}
友元类
1.一个类的友元类的所有成员函数都有访问类的所有成员的权限
2.友元类的声明方法:friend + class +类名
3.友元类的声明是单方面的
4.友元类的声明不是传递的
示例:
//文件class.h
#if !defined __CLASS__H__
#define __CLASS__H__
class B
{friend class A; //声明友元类
private:
int data;
};
class A
{public:
void setB(B &b, int m);
void print(B &b);
};
#endif
//文件class.cpp
//实现类A和B
#include "class.h"
#include <iostream.h>
void A::setB(B &b, int m)
{b.data = m; //访问B的私有成员
}
void A::print(B &b)
{
//访问B的私有成员
cout<<"The private data of class B: “
<<b.data<<endl;
}
#include "class.h"
main()
{A a;
B b;
//调用类A的成员函数修改类B的对象b的私有数据
a.setB(b, 10);
//调用类A的成员函数访问类B的对象b的私有数据
a.print(b);
return 0;
}
相关文章
- Matlab中gray2ind函数用法
- Matlab中yyaxis函数的使用
- matlab学习笔记13_3创建函数句柄
- matlab学习笔记13_2匿名函数
- 【MATLAB教程案例13】基于SA模拟退火优化算法的函数极值计算matlab仿真及其他应用
- 第二十六章 Caché 函数大全 $LIST 函数
- Python-OpenCV中不用函数split()的实现图像多通道分离的方法——ndraary对象切片实现
- 第13周报告2:定义自定义函数,计算sin和cos的近似值
- 第13周报告1:用函数完成分段数学函数的求解
- socket编程之accept()函数
- 3、函数
- 《Java编码指南:编写安全可靠程序的75条建议》—— 指南13:使用散列函数存储密码
- oralcle函数 AVG([distinct|all]x)
- 转 PHP scandir() 函数
- 再谈防抖debounce函数
- java 中函数的参数传递详细介绍
- Matlab函数之sum函数
- go语言基础(二)函数,数组,指针,结构体
- MATLAB调用Python自定义函数(类、函数等)& Python调用MATLAB
- C++调用空指针对象的成员函数成功的理解
- torch.optim optimizer函数