友元函数使用说明
1)必须在类的说明中说明友元函数,说明时以关键字friend开头,后跟友元函数的函数原型,友元函数的说明可以出现在类的任何地方,包括在private和public部分;
2)注意友元函数不是类的成员函数,所以友元函数的实现和普通函数一样,在实现时不用"::"指示属于哪个类,只有成员函数才使用"::"作用域符号;
3)友元函数不能直接访问类的成员,只能访问对象成员,
4)友元函数可以访问对象的私有成员,但普通函数不行;
5)调用友元函数时,在实际参数中需要指出要访问的对象,
6)类与类之间的...
分类:
编程语言 时间:
2015-04-09 15:40:14
阅读次数:
192
5.C#中的类C#中的类只能从一个类中继承过来,而且还有访问权限,例如:公有,私有。。。C++中只有友元类才可以访问类。类的静态特征。属性可以看作类的静态描述。类的动态行为。方法可以看作类的动态描述。在C++中最常见的set,get的类的成员函数,就不再啰嗦了。
今天写C++primer 5th中文版第422页的程序时,出现了”不允许使用不完整的类型“的错误,下面我就用类A 与 类B 作为代表,重现一下该错误,并且提出解决方案。一、带问题的类设计A:1、类A放在A.h 与 A.cpp中2、由于B需要访问A的私有成员,故声明B是其友元类3、A中需要利用自身作为...
分类:
编程语言 时间:
2015-04-08 23:01:35
阅读次数:
181
首先回顾一下三种成员访问限定符:
public(公用的):既可以被本类中的成员函数所引用,也可以被类的作用域内的其他函数(即类外)引用。
private(私有的):只能被本类中的成员函数引用,类外不能调用(友元类除外)
protected(受保护的):不能被类外访问,但可以在派生类的成员函数访问。
接下来就用一张表总结一下基类成员在派生类中的访问属性:
参考资...
分类:
其他好文 时间:
2015-04-08 18:15:25
阅读次数:
233
protected关键字:
摘自MSDN
protected
关键字指定对 member-list 中的成员直到下一个访问说明符(public 或 private)或类定义的末尾的访问。
只能通过以下项使用声明为 protected 的类成员:
最初声明这些成员的类的成员函数。
最初声明这些成员的类的友元。
使用公共或受保护访问(派生自最初声明这些成...
分类:
其他好文 时间:
2015-03-31 16:06:52
阅读次数:
172
1、为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率
具体来说:为了使其他类的成员函数直接访问该类的私有变量
即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数
优点:能够提高效率,表达简单、清晰
缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数。
2、什么时候...
分类:
编程语言 时间:
2015-03-30 23:14:42
阅读次数:
394
上节课跟着老师学到了很多东西,了解到了C#的一些具体功能,并且将其与C++等编程语句进行了比较,发现了它的优势与不足。给我印象最深的是老师说的友元函数,也就是friend类,在一个类中定义了友元函数就可以把privite中的信息分享出去,这一点和C++是一样的。又譬如显式定义explicitly,也...
分类:
其他好文 时间:
2015-03-30 22:46:36
阅读次数:
109
1.是什么?
友元机制允许一个类将对其非公有成员的访问权授予制定的函数或类。 ——《c++ primer》
2.为什么要提出?:
类中一些成员函数使用较为频繁,需要大量时间开销,为了减少时间开销,就允许破坏程序的封装性,使用一个外部函数或类可以访问该类中的私有成员。所以友元的作用在于提高程序的运行效率(即减少了类型检查和安全性检查等都需要的时间开销)。3.友元的问题:
友元的使用破坏了类的...
分类:
编程语言 时间:
2015-03-28 21:53:42
阅读次数:
195
//智能指针类
//----------------------------------------
//1.基数据放在使用计数类中
//实际类指向->使用计数类->基数据
//使用计数类
class U_ptr{
friend class Hasptr;//友元类
int *ip;//这个就是要保护的基数据
size_t use;
U_ptr(int *p):ip(p),use(1){...
分类:
其他好文 时间:
2015-03-18 20:39:07
阅读次数:
121
Operator Overload1.在重载下标运算符时(数组符号):不可重载为友元函数,必须是非static类的成员函数。why2.overload++时,如果是:inta;++a;++在前面时,怎么办?答:countercounter::operator++(int)3.classF{publi...
分类:
编程语言 时间:
2015-03-17 19:54:48
阅读次数:
173