C++程序设计教程第10静态成员与友元
- 格式:ppt
- 大小:405.00 KB
- 文档页数:13
static类中的静态成员,组合类,友元函数,内部类static 表⽰静态的意思在c++中有两种表⽰,静态成员变量和静态成员函数⼀个类中的静态成员只属于当前类,不属于某个对象。
⼀个类的静态成员只有⼀份由当前类所有,每个对象都可以访问静态成员,当然也可以通过类名来访问这⾥推荐⽤类名::静态成员来访问static 成员函数应该在所有的成员函数之外初始化如果不初始化系统默认为0static 成员函数只能访问static成员static成员函数,函数体内不能使⽤this指针在我前前⾯已经说过组合类的概念了,今天我再介绍两个类,友元,以及内部类。
组合类,就是⼀个类中有另⼀个类的对象,如声明⼀个class penson,成员变量有姓名,年龄,出⽣⽇期等,在声明⼀个date类,这个类⾥⾯就是存的年⽉⽇的信息,因此我们可以将person类的出⽣⽇期设为date类,这就构成了⼀个组合类。
友元的概念,就像是我们的朋友,⽐如说⼩红说⼩明是她的朋友,那么对于⼩红来说,⼩明肯定有别⼈所没有的特权(为什么是段⼦⼿⼩明啊,⽼王呢?)因此,类举到我们的类中,就是说,⼀个类可以把另⼀个类当成朋友,给予他访问⾃⼰成员变量的权利(包括私有成员变量,还真是推⼼置腹啊,没有⼀点秘密)。
那么另⼀个类,在⾃⼰的类中就可以访问刚才那个类的变量。
友元还有⼀种概念是友元函数,类似于友元类。
其实,友元类⾥⾯的每个⽅法都是⼀个友元函数,读者⾃⾏脑补。
友元的特征,不能传递(朋友的朋友不⼀定是朋友),不能交换(你把他当朋友,他不⼀定把你当朋友,在这就是他不把你当朋友),不能继承(你爸爸的朋友不⼀定是你的朋友)友元类的使⽤时机:友元虽然可以访问类的成员变量,但是他打破了类的封装,因此不建议这样做。
在运算符的重载是会⽤到友元类在类与类之间要共享资源的时候友元函数的参数问题(友元函数⽆this指针)有3种情况:1、要访问⾮静态成员时,需要对象做参数;2、要访问静态成员或全局变量时,不需要对象做参数;3、如果做参数的对象是全局的,则也不需要对象做参数内部类,内部类也叫做嵌套类。
实验四
友元和静态成员
一、实验目的
2.学习类的静态成员的使用。
3.学习多文件结构在C++程序中的使用。
二、实验任务
1.实现客户机(CLIENT)类。
定义字符型静态数据成员ServerName。
保存其服务器名称;整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。
在头文件client.h中定义类,在文件client.cpp中实现.在文件test.cpp中测试这个类,观察相应的成员变量取值的变化情况。
(提示:新建一个空的控制台项目test,添加头文件client.h,在其中定义类CLIENT,注意使用编译预处理命令;再添加源程序文件client.cpp,在其中实现CLIENT类,注意静态成员变量的使用方法;再添加文件test.cpp,在其中定义main()函数,测试CLIENT类,观察相应的成变量取值的变化情况,注意把相关文件include进来)
2. 编写一个球队程序,其中有两个类:一个是女队类girls_ball,另一个是男队类boys_ball。
每一个类分别有自己的友元函数来计算男、女队员的平均击球率。
两个类还共用两个友元函数:一个是友元函数gbAvg(),用来计算和打印男、女队员总的平均击球率;另一个是友元函数print(),用来打印男、女队员的个人信息。
编一个主程序测试他们
三、实验步骤。
实验4 含有类的静态成员与类的友元的C++程序设计专业:计算机科学与技术班级:10计本1班学号:姓名:实验地点:B102实验时间:2011/11/1 指导教师:李佐勇一、实验目的1.理解类的静态成员解决共享问题的机制;2.掌握类的静态数据成员与静态函数成员的实现方法;3.理解利用友元关系实现数据共享的机制,掌握类的友元函数以及友元类的实现方法;4.学习多文件结构在C++程序中的使用。
二、实验环境一台PC机,Windows XP操作系统,Visual C++ 6.0开发环境。
三、实验内容1.设计一个解决王婆卖瓜问题的程序。
王婆卖瓜,每卖一个瓜,需记录该瓜的重量,还要记录所卖出的总重量和总个数,同时还允许退瓜。
设计一个具有静态数据、函数成员的watermelon类。
实现提示:西瓜类有3个数据成员:重量weight、总重量total_weight以及总个数total_number。
因为不论西瓜是否卖出,总重量total_weight和总个数total_number这两个数据总是要保留的,且这两个数据与单个的西瓜无关联,因此这两个数据要申明为静态数据成员。
成员函数:卖瓜用构造函数模拟,退瓜用析构函数模拟,瓜重用disp成员函数给出屏幕提示。
为了用不与特定对象相联系的静态成员函数来访问静态数据,还需要定义一个显示总重量和总个数的静态成员函数total_disp。
2.设计一个程序,其中有3个类,即CBank、BBank和GBank,分别为中国银行类、工商银行类和农业银行类。
每个类都包含一个私有数据balance,用于存放储户在该行的存款数,另有一个友元函数total用于计算储户在这3家银行中的总存款数。
3. 设计一个程序,其中有2个类,Point类为点类,包含2个私有数据x和y,表示点的坐标,line类为直线类,包含3个私有数据a、b和c,表示直线方程ax+by+c=0。
另有一个友元函数dist,用于计算一个点到直线的距离。
南昌航空大学实验报告二00七年月日课程名称:面向对象程序设计实验名称:静态成员与友元班级: 090453 学生姓名:余圣波学号: 09045329 指导教师评定:签名:1、实验目的·学习友元函数的定义和原理。
·学习静态数据成员和静态成员函数的使用。
·学习静态成员代替全局变量实现对象间的共享。
2、实验内容(1)有如下类的定义。
类成员函数copy用于实现两个对象的相互拷贝,请完成该函数的实现。
(有两种方法即不用this 指针和用this指针)成员函数实现:#include <iostream.h>class Myclass{public:Myclass (int a,int b) { x=a;y=b;}void copy(Myclass & my);void print( ){ cout<<“x=”<<x<<endl;cout<<”y=”<<y<<endl;}private:int x,y;};void Myclass::copy(Myclass & my){x=my.x,y=my.y;}void main(){Myclass my(10,20),t(30,40);my.print( );my. Copy(t);my.print( );}友员函数实现:#include <iostream.h>class Myclass{public:Myclass (int a,int b) { x=a;y=b;}friend void copy(Myclass &o,Myclass y);void print( ){ cout<<"x="<<x<<endl;cout<<"y="<<y<<endl;}private:int x,y;};void copy(Myclass &o,Myclass y){y.x=o.x,y.y=o.y;y.print();cout<<"友元拷贝函数被调用"<<endl;}void main(){cout<<"请输入对象数据:"<<endl;int a,b,c,d;cin>>a>>b;Myclass o(a,b);o.print();cout<<"请输入对象数据:"<<endl; cin>>c>>d;Myclass y(c,d);y.print();copy(o,y);y.print();}(2)商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,单价不一样,因此商店需要记录下目前库存的货物的总重量和总价值。