ad

《C++程序开发案例课堂》_了解C++的更好途径_10.7.2 静态成员函数

admin 65 2023-11-01

【摘要】 本书摘自《C++程序开发案例课堂》一书中第10章,第7节,由刘春茂、李琪编著。

10.7.2 静态成员函数

静态的成员函数和静态成员数据相同,它们都属于某一个类的静态成员而不是属于某个 对象的成员。因此,在使用静态成员,不需要好似用对象名。

下面用一个例子来说明一下静态成员函数如何使用。

【例10-8】静态成员函数的使用(代码10-8.txt)。

新建名为jtleytest 的C++ Source File源程序。源代码如下:

#include #include

using namespace std;

《C++程序开发案例课堂》_了解C++的更好途径_10.7.2 静态成员函数

class M

public:

t(tic voai)d{A;(M mB)+;=a;)

private:

int A;

static int B;

};

void M::f1(M m)

{ cout<<"A="<

cout<<"B="<

int M::B=0;

void main()

M P(5),Q(10);

M::f1(P);//file:调用时不用对象名

("pause");

【代码剖析】

在该例中,首先定义了一个M 类,在该类中定义了私有成员数据A 和静态成员数据B;

同时,定义了该类的构造函数 M,M 中对 A 进行赋值,并且将A 的值全部累加到B 上。定 义了一个静态成员函数 fl,把 A 的值和B 的值输出。在主程序中,首先定义了 M 类的两个 对象P 和Q, 分别把P 和Q 作为参数调用M 类的fl 函数。

运行结果如图10-8所示。

从结果来看,在把P 作为参数调用fl时,输出了A 为5,这个5就是在对P 进行初始化 时赋的值, B 为15是因为B 是静态变量,在分别对P 和 Q 进行初始化的时候就对B 进行了

累加计算,所以两次调用 fl 的时候B 值都为15。在对 fl 进行定义的时候,如果操作静态变 量 B, 则不必指定某个对象,如果是非静态变量 A, 则需指定是哪个对象的成员。调用静态 成员函数使用如下格式:

<类名>::<静态成员函数名>(<参数表>)。

10.8 友 元 函 数

对于一般的函数来说,如果想要访问类中的保护数据成员,必须通过类的公共函数来访 问,对于公共函数来说,任何外部函数都可以调用,对安全性有一定的影响。在 C++ 中引入 友元函数的概念,使用 friend 关键字来定义友元函数。通过友元函数,可以直接调用类中的 保护成员,不需要将成员全部设置成 public, 使数据的安全性得到了保障。利用友元函数访问 类中的数据成员,这样就避免了总是调用类的成员函数所造成的内存开销大,效率低的 问题。

友元关系是单向的,不具有交换性和传递性。

在类里声明一个普通函数,在前面加上 friend 修饰,那么这个函数就成了该类的友元, 可以访问该类的一切成员。

下面通过一个实例来说明友元函数的使用方法。

【例10-9】友元函数的使用(代码10-9.txt)。

新建名为 yytest 的 C++Source File 源程序。源代码如下:

#include #include

using namespace std;

class Internet

public:

Internet(char *name,char *address)

strcpy(Internet::name,name);

strcpy(Internet::address,address);

friend void ShowN(Internet kobj);//友元函数的声明

protected:

【代码剖析】

在该例中,首先定义了Internet类,在该类中定义了两个保护数据成员name 和 address; 定义了构造函数,对两个数据成员进行初始化;定义了友元函数 ShowN, 该函数将参数指定 的 Internet类的 name 成员函数输出。在主程序中,定义了Internet类 a, 调用 ShowN 函数以 a为参数,把a 的name 输出。

运行结果如图10-9所示。

从结果来看,成功地访问到了 a 对象的保护成员name。 友元函数并不能看作是类的成员函数,它只是个被声明为类友元的普通函数,所以在类外部函数的定义部分不能够写成 void Internet::ShowN(Internet 图10-9 使用友元函数

&obj),这一点要注意。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 [email protected] 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《C++程序开发案例课堂》_了解C++的更好途径_5.3 循环语句
下一篇:《C++程序开发案例课堂》_了解C++的更好途径_1.2 C++ 的优势
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×