求大神不吝赐教 近义词,当友元函数的叁数是对象数组时,在主函数中要怎么调用该友元函数。

C++填空题集_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C++填空题集
上传于||暂无简介
阅读已结束,如果下载本文需要使用5下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
你可能喜欢友元函数:
说明:  在类型声明中将原型放入并在原型声明前加上关键字friend,但不要在定义时加上关键字friend,它的访问权限与类的成员函数的访问权限相同&声明而已为private,public,protect&
作用:  把其他类中函数作为自己的友员成员函数,让特定的类成员成为另一个类的友元函数,而不必让整个类成为友元,但在使用时,必须小心排列各种声明和定义顺序(且需用到向前声明)
向前声明格式:
class 类名 ;//向前声明本类
class 所用到的友员成员函数的类的类名 {....};//友元函数类的定义
class 类名 {&}//本类的定义
注意:  友元函数不要在类的内部定义,不然编译不会通过
  友元函数(内部定义):
class Point
Point(double xx, double yy)
friend void Getxy(Point &a){
cout&&"position is: ("&&a.x&&","&&a.y&&")"&&}
  元函数(内外部定义):
class Point
Point(double xx, double yy)
friend void Getxy(Point &a);
void Getxy(Point &a)
cout&&"position is: ("&&a.x&&","&&a.y&&")"&&
  友元成员函数:
//对 Date 类的向前声明
class Time
//定义 Time 类
Time(int,int,int);
void display(Date&);
//display 是 Time 类的成员函数,形参是 Date 类对象的引用
class Date
Date(int,int,int);
friend void Time::display(Date&);
//声明 Time 类的 display函数为本类的友元函数
Time::Time(int h,int m,int s)
//定义 Time 类的构造函数
void Time::display(Date&d)
//display 函数的作用是输出年、月、日和时、分、秒
cout&&d.month&&"/"&&d.day&&"/"&&d.year&&
//引用 Date 类对象中的私有数据
cout&&hour&&":"&&minute&&":"&&sec&&
//引用本类对象中的私有数据
Date::Date(int m,int d,int y)
//定义 Date 类的构造函数
请注意本程序的主函数中调用友元函数访问有关类的私有数据的方法:
1、在函数名 display 的前面要加 display 所在的对象名(t1);
2、display 成员函数的实参是 Date 类对象 d1,否则就不能访问 d1 中的私有数据;
3、在 Time::display 函数中引用 Date 类私有数据时必须加上对象名,如 d.month 。
作用:  如果想通过指向派生类对象的基类指针,调用派生类中覆盖的成员函数,可以用虚函数的方法让派生类中覆盖的成员函数被调用
格式:  virtual 返回类型 函数名 (形参表);
如果定义的类作为基类,则应将那些要在派生类中重新定义的类的方式声明为虚拟的
如果使用指向对象的引用或指针调用虚方法,程序将使用做为对象类型的定义方法而不是使用做为了引用或指针定义的方法
给每个对象添加一个隐藏成员,隐藏成员中保存了个指 向函数的地址数组的指针,这种数组称为虚函数表(vtbl)虚函数表中存储了为类对象进行声明的虚函数地址,派生类对象将包含一个指向独立地址的表指针,如果派生类提供了虚函数的新的定义,该虚函数地址被添加到vtbl中,注意,无论类中包含的虚函数是1还是10个都只需在对象中添加一个地址成员,只是表大小不同而已
格式:    virtual 函数类型 函数名(形参表)=0;&无函数体&
作用:    有时,要在基类中不能给出虚函数实现代码,这是可将这种虚函数声明为纯虚函数
注意:    有纯虚函数的类都是抽象类,并且抽象类是不能产生实例的.
虚函数使用总结
如果你期望派生类从新定义一个成员函数,那么你应该在基类中把此函数设置为 virtual
以单一指令调用不同函数,这种性质称为 Polymorphism(多态)
虚拟函数是 C++ 语言的 Polymorphism 性质以动态绑定的关键
既然抽象类中的虚函数不打算被调用,我们就不应该定义它,应该把它设置为纯虚函数(在函数声明后加 "=0" 即可)
我们可以说,拥有纯虚函数者为抽象类(abstract class),以别于所谓的具体类(concrete class)
抽象类不能产生实例,但我们可以拥有抽象类的指针,以便于操作抽象类的各个派生类
虚函数派生下去的仍然为虚函数,而且可以省去 virtual 关键字
//有虚函数的基类
virtual void show(){cout&&"这是基类的 A !"&&}
//用虚函数声明 show 函数
class B:public A
void show(){cout&&"这是派生类 B !"&&}
//没有虚函数的基类
void show(){cout&&"这是基类 C !"&&}
class D:public C
void show(){cout&&"这是派生类 D !"&&}
void func( )
A* a = new B;
C* c = new D;
a-&show(); //通过虚函数找到子类的成员函数 show
c-&show(); //没有虚函数所以只能调用到基类的成员函数 show
/************************************
调用 func 函数后的输出结果:
这是派生类 B !
这是基类 C !
************************************/
//有纯虚函数的基类
virtual void show() = NULL;
//用纯虚函数声明 show 函数
//要注意的是如果类有纯虚函数那么这个类无法产生实例,并且纯虚函数的必须在其的派生类中实现
class B:public A
void show(){cout&&"这是派生类 B !"&&}//实现基类 A 的纯虚函数 show
利用虚函数/纯虚函数,打破子类访问权限.例子如下:
#include&iostream&
#include&cstdlib&
using namespace
virtual void output1() = 0;
virtual void output2(){cout&&"this is A"&&}
class B:public A{
void output1(){cout&&"this is success!"&&}
protected:
void output2(){cout&&"this is B"&&}
void main()
a-&output1();
a-&output2(); //通过 a 我们访问到了 B 变量 b 的私有成员函数和保护成员函数 output1,output2
//b.output1();
//b.output2();//这里我们是无权限去访问类 B 变量 b 的私有成员函数和保护成员函数 output1,output2
system("pause");
成员函数属性:
&函数     &&能否被继承& &成员还是友员& &默认能否生成& &能否为虚函数& &是否可以有返回值&构造函数   & &        成员      &       &        &析构函数     &        成员      &       &       &&=      & &&        成员      &        &&       &&&       &        任意      &       &       &&转换函数    &       成员      &        &       &&()    &  &       成员      &&        &&       &&[ ]      &       成员      &&       &       &&&       &       成员       &       &       &&op =   &  &&       任意      &&       &       &&new      &       静态成员    &&       &       &void *delete     &       静态成员    &&       &       &void其他操作符   &       任意      &&        &&       &其他成员    &       成员      &&       &       &友元      &       友员      &&       & &       &&
在类中用 friend class 友元类名;
在友元类的所有成员函数都可以访问此类中的所有数据
class 友元类名 ;//向前声明本类
class&拥有友元类的类名{....};//拥有友元类的类的定义
class 友元类名 {&}//友元的定义
友元关系不能被继承
友元关系是单向的,不具有交换性.若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明.
友元关系不具有传递性.若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明
使用友元类:
//友元类的向前声明
//拥有友元类的类的定义
//友元类的定义
void show(A &a)
cout&&a.y&&
多个类包含一个友元类:
//友元类的向前声明
//拥有友元类的类的定义
//拥有友元类的类的定义
//友元类的定义
void show(A &a,B &b)
cout&&a.x&&"
void func()
c.show(a,b);
一个类包含多个个友元类:
//友元类向前声明
//友元类向前声明
//拥有友元类的定义
//友元类的定义
void show(A &a)
cout&&"the value of a is: "&&a.x&&"
(in the class B)"&&
//友元类的定义
void show(A &a)
cout&&"the value of a is: "&&a.x&&"
(in the class C)"&&
void func()
b.show(a);
c.show(a);
阅读(...) 评论()面向对象程序设计试题集_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
面向对象程序设计试题集
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩31页未读,继续阅读
你可能喜欢C++编程题,友元函数。_百度知道
C++编程题,友元函数。
3000103 Tonny 85000107 Eric 5 000109 Sam 34 4000111 Tom 3000112 Jerry 4000113 Jack 5000117 Hale 60Sample Output: 测试输入包含若干测试用例,读取数据成员的值,后面是5个学生的信息:000105 Mike 90000104 Sam 97Sample Input,后面是4个学生的信息)000101 Bob 20 000102 Alice 0     000104 Sam 97000109 Anna 850 输出样例,数据成员包括学号,999999])000102 Alice 73 000103 Anna 85 000104 Sam 34 000105 Mike 90 4 (n=4;=n&lt,相应的结果不要输出;=100)000101 Bob 56 (学号 [0,1&lt,每个测试用例占一行:括号内为说明5
(n=5,设置数据成员的值。输入输出示例。当读入n=0时输入结束:构造函数。输入格式,查找成绩最高的那一项记录,再编写一个Student类的友元函数。在主函数中定义包含n个对象的数组;成员函数有、姓名和成绩定义一个学生类Student
&double&double&double&double&&&&&x0;&&&nbsp.y)*(l1.y)).x)*(l1;,double&x;&&&return&nbsp:&&nbsp,y;&&Location(double&l2){&distance(Location&y0){};&nbsp.x-l2,Location&(l1;&&l1;&&nbsp,Location&&+&friend&&nbsp.x)&&Gety();&nbsp.y-l2.h&Location{public.y-l2;double&&&&&distance(Location&);&&&);class&nbsp.x-l2;double&};sqrt((l1;Getx(); &nbsp:&&&}&distance(Location&nbsp#include&nbsp
来自团队:
其他类似问题
为您推荐:
友元函数的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁复习作业题的参考答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
复习作业题的参考答案
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩11页未读,继续阅读
你可能喜欢

我要回帖

更多关于 不吝赐教 的文章

 

随机推荐