c++友元函数、友元类、友成员函数
友元函数:不是类成员函数,是一个类外的函数,但是可以访问类所有成员。
class Point{
public:
friend void fun(Point t);//友元函数
private:
int a;
protected:
int b;
};
void fun(Point t)
{
t.a = ;
t.b = ;
cout << t.a << " " << t.b << endl;
}
int main()
{
Point test;
fun(test);
system("pause");
return ;
}
运行结果:

友元类:类A是类B的友元类,则A就可以访问B的所有成员(成员函数,数据成员)。(类A,类B无继承关系)
class Point{
friend class Line;
public:
void fun()
{
this->x = ;
this->y = ;
}
private:
int x;
protected:
int y;
};
class Line{
public:
void printXY()
{
t.fun();
cout << t.x << " " << t.y << endl;
}
private:
Point t;
};
int main()
{
Line test;
test.printXY();
system("pause");
return ;
}
运行结果:

友成员函数:使类B中的成员函数成为类A的友元函数,这样类B的该成员函数就可以访问类A的所有成员(成员函数、数据成员)了
class Point;//在此必须对Point进行声明,如不声明将会导致第5行(void fun(Point t);)“Point”报错(无法识别的标识符)
class Line{
public:
void fun(Point t);
//void Line::fun(Point t)//在此编译器无法获知class Point中到底有哪些成员,所以应在Point后面定义
//{
// t.x = 120;
// t.y = 130;
// t.print();
//}
};
class Point{
public:
friend void Line::fun(Point t);
Point(){}
void print()
{
cout << this->x << endl;
cout << this->y << endl;
}
private:
int x;
protected:
int y;
};
void Line::fun(Point t)//应在此定义fun函数
{
t.x = ;
t.y = ;
t.print();
}
int main()
{
Point test;
Line LL;
LL.fun(test);
system("pause");
return ;
}
运行结果:

总结:关键字“friend”描述的函数就是友元函数,“friend”所在类的所有成员都可被友元函数访问。(带有关键字“friend”的类,就说明这个类有一个好朋友,他的好朋友就是关键字“friend”后面跟的那个函数或类。他的好朋友可以访问他的所有成员 )
c++友元函数、友元类、友成员函数的更多相关文章
- Delphi函数详解:全局函数,内部函数,类的成员函数,类的静态方法
1. Delphi中的全局函数 //要点: 需要给其他单元调用, 必须在 interface 声明, 但必须在 uses 区后面 unit Unit1; interface uses Window ...
- C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 对运算符重载的函数有两种处理方式:(1)把运算符 ...
- C++类的成员函数(在类外定义成员函数、inline成员函数)
类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private ...
- 读书笔记 effective c++ Item 23 宁可使用非成员非友元函数函数也不使用成员函数
1. 非成员非友元好还是成员函数好? 想象一个表示web浏览器的类.这样一个类提供了清除下载缓存,清除URL访问历史,从系统中移除所有cookies等接口: class WebBrowser { pu ...
- C++点滴----关于类常成员函数
关于C++中,类的常成员函数 声明样式为: 返回类型 <类标识符::>函数名称(参数表) const 一些说明: 1.const是函数声明的一部分,在函数的实现部分也需要加上const ...
- c++函数模板作为类的成员函数,编译报错LNK2019的解决方法
为了使某个类的成员函数能对不同的参数进行相同的处理,需要用到函数模板,即template<typename T> void Function(). 编译时报错LNK2019 解决方法: 1 ...
- [转载]能不能同时用static和const修饰类的成员函数?
题目(一):我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量).请问:能不能同时用static和con ...
- (转)c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考
昨天去面试一家公司,面试题中有一个题,自己没弄清楚,先记录如下: class D { public: void printA() { cout<<"printA"< ...
- C++类的成员函数使用的一些小总结
From: http://blog.csdn.net/xiayefanxing/article/details/7607506 这一阵做项目代码开发的时候,用到了在一个C++文件中使用另一个类的成员函 ...
随机推荐
- <Android 应用 之路> MPAndroidChart~PieChart
简介 MPAndroidChart是PhilJay大神给Android开发者带来的福利.MPAndroidChart是一个功能强大并且使用灵活的图表开源库,支持Android和IOS两种,这里我们暂时 ...
- MUI框架-07-HBuilder+夜神安卓模拟器
MUI框架-07-HBuilder+夜神安卓模拟器 有时候我们在 HBuilder 里面 web 浏览器预览我们的 MUI 项目界面时,总感觉这个 web 浏览器随便拖拉比例,大小可调,但它毕竟是浏览 ...
- centos安装flash
自己操作步骤: 1 :http://get.adobe.com/cn/flashplayer/ 还是进入此下载页选择“.rpm,适用于其它Linux”,下载该rpm文件 2 :# rpm -iv ...
- 从golang-gin-realworld-example-app项目学写httpapi (二)
https://github.com/gothinkster/golang-gin-realworld-example-app/blob/master/users/models.go 模型定义 use ...
- python 3 输入和输出
一.普遍的输入和输出 1.输入 在python3中,函数的输入格式为:input(),能够接受一个标准输入数据,返回string类型. input() 函数是从键盘作为字符串读取数据,不论是否使用引号 ...
- 【Leetcode】【Easy】Compare Version Numbers
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- spider-抓取网页内容
使用urllib2抓取网页内容: import urllib2 from HTMLParser import HTMLParser request = urllib2.Request('http:// ...
- Python初学者第十六天 文件处理操作练习
16day 练习:模拟登陆 1.用户输入账号密码进行登陆: 2.用户信息保存在文件内: 3.用户密码输入错误三次后,锁定用户,下次登陆,检测到这个用户再也登陆不了 #获取用户名及密码f_user = ...
- July 31st 2017 Week 31st Monday
Elegance is the only beauty that never fades. 优雅是唯一不会褪色的美. Even the most beautiful apperace would be ...
- Radix Sorts
基数排序 Strings In Java Char Data Type C 语言中的字符数据类型占一个字节(8 比特),最多只能表示 256 个字符.支持 7 位的标准 ASCII(American ...