1 / 65
文档名称:

F第4部分对象型方法高级应用及性能.ppt

格式:ppt   大小:1,218KB   页数:65页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

F第4部分对象型方法高级应用及性能.ppt

上传人:孔乙己 2022/7/29 文件大小:1.19 MB

下载得到文件列表

F第4部分对象型方法高级应用及性能.ppt

文档介绍

文档介绍:F第4部分对象型方法高级应用及性能
将指针显式赋值为0,可以预防对无用指针(已经删除、没有初始化等)的再次无意使用所带来的不安全问题!
其他问题
set成员函数对输入参数的合法性检查,可以增加类成员属性的有效性!
、Protected或Private成员!(对于Protected和Private,不需要经过Public访问函数 );
可以以函数原型形式放在类定义文件(.h)的任何位置,但一般提倡放在定义文件的开始位置;形式是: friend 返回类型 函数名(函数参数);
在类实现文件( .cpp)中定义friend函数的具体实现时,不能用类名前缀!形式是:返回类型 函数名(函数参数){ … };而不是:返回类型 类名::函数名(函数参数){ … };
friend函数不能用this指针!
一批重载函数可以作为某个类的friend函数;friend函数可以是普通函数,也可以使某个类的成员函数。
friend函数必须在类定义时显式的指定!
friend函数一般用在下列三种场合:需要快速直接访问类的Protected或Private成员;运算符重载时,第一个运算量不是对象类型而是一般类型;建立多个类的关系运算。
friend函数、 friend类及其作用
关于friend类:
用于将某个类的所有成员函数指定为本类的友元(friend)函数!
形式是:
class A {
friend class B;

};
B的所有成员函数都可以直接操纵A的成员!
friend特性会破坏封装特性(信息隐藏)!

类的friend关系不支持对称性(symmetric)和传递性(transitive),必须通过显式说明!
事实上,friend特性是建立多个非同族类运算关系的一种高效实现方法和机制!
Examples: ~
Self-Study Section
对于模板类: template < typename T > class X
friend void f1();
friend void f2( X<T> & );
friend void A::f3();
friend void C<T>::f4( X<T>& );
friend class Y;
friend class Z<T>;
普通函数f1是模板类X的所有特化类的友元函数,即f1是特化类X<int>、X<double>、X<string>等等的友元函数。
普通函数f2是模板类X的所有特化类中某一个具有同样类型参数的特化类的友元函数,即 f2(X<float>&)是特化类X<float>的友元函数; f2(X<string>&)是特化类X<string>的友元函数。
类A的成员函数f3是模板类X的所有特化类的友元函数。
另一个具有同样类型参数的模板类C的成员函数f4是X的所有特化类中某一个具有同样类型参数的特化类的友元函数。
类Y的所有成员函数是模板类X的所有特化类的友元函数。
另一个具有同样参数类型的模板类Z的所有成员函数是模板类X的所有特化类中某一个具有同样类型参数的特化类的友元函数。
其中给出的各种友元关系及其含义:
friend函数、 friend类及其作用
类模板可以和全局函数、另一个类(可能是一个类模板特化)的成员函数、整个类(可能是一个类模板特化)确定其友元关系
类可以有同名的友元函数和成员函数,它们都是不同的函数
一个函数可以同时是一个类的成员函数又是另一个类的友元函数
friend函数、 friend类及其作用
作用是:消除函数调用!
inline函数(内联函数)
关于inline函数:
可以是类的成员函数,也可以是不属于任何类的普通函数。
通过在函数返回类型前用关键词inline说明。
inline函数一般适合比较小、但需要频繁调用的函数!
尽管inline函数会提高执行性能,但会使整个程序代码增大!
inline函数在编译时替换,替换遇到的问题有:常量表达式求值、临时对象、局部变量设置、参数副作用等
注意inline函数大小与指令缓冲的问题(可能会导致系统颠簸而失去其应有的高性能)
inline函数(内联函数)
替换遇到的问题
mutable类成员
一种替换const_cast的机制,是一种存储类别限定符!
作用是:具有mutable限制符的成员属性总是可以修改的,即使它处于一个const对象中!
对于const对象,其const成员函数中可以通过const_cast达到修改成员属性的目的。但每次修改都