二级C 类与对象:友员

文章作者 100test 发表时间 2007:03:10 17:12:21
来源 100Test.Com百考试题网


 友元:友元是一种定义在类外部的普通函数,它需要在类体内进行说明,在说明时,前面加上 friend 。友元不是成员函数,但可以访问类的私有成员。目的在于提高函数的运行效率。但是设置友元是以破坏封装性为代价的。

1 、友元函数:

 友元函数不是类的成员函数,但是友元函数可以访问该类的私有成员。

例 3 :分析下列程序的输出结果:

#include

#include

class point

{

public:

point(doube xx,double yy)

{

x=xx.

y=yy.

}

void Getxy().

friend double Distance(point &.a,point &.b).

private:

double x,y.

}.

void point::Getxy()

{

cout<<”(“<

}

double Distance(point &.a,point &.b)

{

double dx=a.x-b.x.

double dy=a.y-b.y.

return sqrt(dx*dx dy*dy).

}

void main()

{

point p1(3.0,4.4),p2(6.0,8.0).

p1.Getxy().

p2.Getxy().

double d=Distance(p1,p2).

cout<<”Distance is”<

}

运行结果:

(3.0,4.0)

(6.0,8.0)

Distance is 5

Point 类中说明了一个友元函数 Distance() ,它可以 point 类的私有成员。该程序的功能是已知两点坐标,求两点间距。

例 4 :分析下列程序的输出结果:

#include

class Time

{

public:

Time(int new_hours,int new_minutes)

{

hours=new_hours.

minutes=new_minutes.

}

friend void Time12(Time time).

friend void Time24(Time time).

private:

int hours,minutes.

}.

void Time12(Time time)

{

if(time.hours>12)

{

time.hours-=12.

cout<

}

else

cout<

}

void Time24(Time time)

{

cout<

}

void main()

{

Time Time1(20,30),Time2(10,45).

Time12(Time1).

Time24(Time1).

Time12(Time2).

Time24(Time2).

}

运行结果:

8:30PM

20:30

10:45AM

10:45

2、友元类:当一个类作为另一个类的友元时,这个类的所有成员函数都是另一个类的友元函数。

例 5 :分析下列的输出结果:

#include

class X

{

friend class Y.

public:

void Set(int I)

{

X=I.

}

void Display()

{

cout<<”x=”<

cout<<”y=”<

}

public:

int x.

static int y.

}.

class Y

{

public:

Y(int I,int j).

Void Display().

Private:

X a.

}.

int X::y=1.

Y::Y(int I,int j)

{

a.x=I.

X::y=j.

}

void Y::Display()

{

cout<<”x=”<

cout<<”y=”<

}

void main()

{

X b.

b.Set(5).

b.Display().

Y c(6,9).

c.Display().

b.Display().

}

执行结果:

x=5,y=1

x=6,y=9

x=5,y=9
例 6 :编写一个类,声明一个数据成员和一个静态数据成员。让构造函数初始化数据成员,并把静态数据成员加1,让析构函数把静态数据成员减1。然后创建三个对象,显示它们的数据成员和静态数据成员。

#include

class example

{

public:

example(int num)

{

B=num.

A .

}

void Display()

{

cout<<"B="<

}

~example()

{

A--.

cout<<"A="<

}

private:

int B.

static int A.

}.

int example::A=0.

void main()

{

example a(20),b(30),c(40).

a.Display().

b.Display().

c.Display().

}

运行结果:

B=20,A=3

B=30,A=3

B=40,A=3

A=2

A=1

A=0

例 7 :分析下列的程序的运行结果:

#include

class cat.

class dog

{

public:

dog(int i)

{

weight=i.

}

friend int sum(int total,cat&.a1,dog&.a2).

protected:

int weight.

}.

class cat

{

public:

cat(int j)

{

weight=j.

}

friend int sum(int total,cat&.a1,dog&.a2).

protected:

int weight.

}.

int sum(int total,cat&.a1,dog&.a2)

{

return total a1.weight a2.weight.

}

void main()

{

cat b1(24).

dog b2(20).

int total=0.

cout<

}

运行结果为:

44

这里, sum() 是 cat 类和 dog 类的友元函数,可以通过对象访问类的私有数据成员 weight 。


相关文章


二级C 类与对象:静态成员函数
2003年4月全国计算机等级考试二级C笔试试卷(含答案)
2001年4月全国计算机等级考试二级C语言试卷(含答案)
二级C 类与对象:友员
二级C 类与对象:静态成员和友员
2001年9月全国计算机等级考试二级C语言试卷(含答案)
2002年4月全国计算机等级考试二级C语言试卷(含答案)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛