友元函数、友元类、访问私有数据成员、友元关系[C++]
2010-09-25 16:52
459 查看
http://scudong.blogbus.com/logs/46868663.html
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://scudong.blogbus.com/logs/46868663.html
友元函数(friend function)
1. 什么是友元函数?
一个类的私有数据成员通常只能由类的函数成员来访问,而友元函数可以访问类的私有数据成员,也能访问其保护成员
2. 友元函数的用处体现在哪里?
2.1 使用友元函数可提高性能,如:用友元函数重载操作符和生成迭代器类
2.2 用友元函数可以访问两个或多个类的私有数据,较其它方法使人们更容易理解程序的逻辑关系
3. 使用友元函数前应注意:
3.1 类的友元函数在类作用域之外定义,但可以访问类的私有和保护成员
3.2 尽管类定义中有友元函数原型,友元函数仍然不是成员函数
3.3 由于友元函数不是任何类的成员函数,所以不能用句柄(对象)加点操作符来调用
3.4 public, private, protected成员访问符与友员关系的声明无关,因此友元关系声明可在类定义的任何位置,习惯上在类定义的开始位置
3.5 友元关系是指定的,不是获取的,如果让类B成为类A的友元类,类A必须显式声明类B为自己的友元类
3.6 友元关系不满足对称性和传递性
3.7 如果一个友元函数想与两个或更多类成为友元关系,在每个类中都必须声明为友元函数
4. 注:由于C++属于混合语言,常在同一个程序中采用两种函数调用且这两种函数调用往往是相反的。类C语言的调用将
基本数据或对象传递给函数,C++调用则是将函数(或信息)传递给对象
实例1. 友元函数的声明、定义与使用
#include <iostream>
using namespace std;
class Car
void display(Car x) //友元函数的定义
int main( )
输出结果:
Enter the color: green 回车
Enter the speed: 100 回车
The color of the car is : green
The speed of the car is : 100
实例2. 将一个函数声明为多个类的友元
#include <iostream>
using namespace std;
class Virus; //类'Virus'未定义前要用到,需事先告诉编译器'Virus'是一个类
class Bacteria
class Virus
void Check (Bacteria b, Virus v) //友元函数的定义
int main()
#include <iostream>
using namespace std;
class Add
class Support
int main()
{
Add ad;
Support sup;
sup.Sum(ad);
return 0;
}
输出结果:
The sum of the 2 members is : 8
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://scudong.blogbus.com/logs/46868663.html
友元函数(friend function)
1. 什么是友元函数?
一个类的私有数据成员通常只能由类的函数成员来访问,而友元函数可以访问类的私有数据成员,也能访问其保护成员
2. 友元函数的用处体现在哪里?
2.1 使用友元函数可提高性能,如:用友元函数重载操作符和生成迭代器类
2.2 用友元函数可以访问两个或多个类的私有数据,较其它方法使人们更容易理解程序的逻辑关系
3. 使用友元函数前应注意:
3.1 类的友元函数在类作用域之外定义,但可以访问类的私有和保护成员
3.2 尽管类定义中有友元函数原型,友元函数仍然不是成员函数
3.3 由于友元函数不是任何类的成员函数,所以不能用句柄(对象)加点操作符来调用
3.4 public, private, protected成员访问符与友员关系的声明无关,因此友元关系声明可在类定义的任何位置,习惯上在类定义的开始位置
3.5 友元关系是指定的,不是获取的,如果让类B成为类A的友元类,类A必须显式声明类B为自己的友元类
3.6 友元关系不满足对称性和传递性
3.7 如果一个友元函数想与两个或更多类成为友元关系,在每个类中都必须声明为友元函数
4. 注:由于C++属于混合语言,常在同一个程序中采用两种函数调用且这两种函数调用往往是相反的。类C语言的调用将
基本数据或对象传递给函数,C++调用则是将函数(或信息)传递给对象
实例1. 友元函数的声明、定义与使用
#include <iostream>
using namespace std;
class Car
void display(Car x) //友元函数的定义
int main( )
输出结果:
Enter the color: green 回车
Enter the speed: 100 回车
The color of the car is : green
The speed of the car is : 100
实例2. 将一个函数声明为多个类的友元
#include <iostream>
using namespace std;
class Virus; //类'Virus'未定义前要用到,需事先告诉编译器'Virus'是一个类
class Bacteria
class Virus
void Check (Bacteria b, Virus v) //友元函数的定义
int main()
#include <iostream>
using namespace std;
class Add
class Support
int main()
{
Add ad;
Support sup;
sup.Sum(ad);
return 0;
}
输出结果:
The sum of the 2 members is : 8
相关文章推荐
- 友元函数、友元类、访问私有数据成员、友元关系
- 友元函数、友元类、访问私有数据成员、友元关系
- 友元函数、友元类、访问私有数据成员、友元关系
- 友元——友元可以访问与其有好友关系的类中的私有成员。 友元包括友元函数和友元类。
- 友元函数、友元类、访问私有数据成员、友元关系
- 友元函数、友元类、访问私有数据成员、友元关系
- C++中访问类的私有数据成员的第三种方法
- C++:友元(非成员友元函数、成员友元函数、友元类)
- 【C++】【一日一练】通过友元访问或改变类的私有成员【20140508】
- 友元函数、友元类、访问私有成员
- 【C++】私有数据成员不能用对象去访问吗
- C++中访问类的私有数据成员的第三种方法
- C++友元函数访问私有成员
- C++友元函数、友元类、友元成员函数
- C++ 入门 (四) 私有数据成员和友元
- C++语法基础--恢复继承成员的访问级别,默认继承保护级别,友元关系与继承,继承与静态成员
- 【读书笔记】【C++】类外访问私有数据成员的两种方式
- c++ 友元函数 还是不能访问私有成员。。 http://zhidao.baidu.com/link?url=Ccm5gZvOc733A_YsS2kj-LZsVtdwu6BT3WR97u66jZAZ1
- C++私有数据成员提取到类外的方法总结
- C++中巧用#define访问类的私有成员