实验四:静态成员和友元的使用
实验学时:2
实验类型:验证
实验要求:必修
一、实验目的
1、理解静态成员在数据共享中的作用。
2、掌握友元的定义和使用方法。
二、实验内容
1、输入下面的程序(教材第131页例5-5),体会静态数据成员的特点。
#include class Test { private: int k; public: static int n; Test (int kk) { k=kk; n++; } void Display( ) { cout<<\"n=\"< void main( ) { Test t1(10); t1.Display( ); Test t2(20); t2.Display( ); Test::n++; k=\"< } 2、输入下面的程序(教材第136页例5-7),体会友元函数的特点。 #include #include class point { private: double x,y; public: point(double xx,double yy) { x=xx; y=yy; } double get_x( ) { return x; } double get_y( ) { return y; } friend double distance(point p1, point p2) { return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)); } }; void main( ) { point myp1(1,1),myp2(4,5); cout<<\"the distance is:\"< 3、编写一个程序:声明一个Cat类,拥有静态数据成员HowManyCats,用以记录Cat的个体数目;拥有静态成员函数GetHowMany(),用以存取HowManyCats。设计程序并测试这个类,体会静态数据成员好静态成员函数的用法。 4、编写一个程序:输入几个学生的姓名、英语和计算机成绩,然后按照总分从高到低排序。要求定义一个student类,用友元函数实现排序。 三、实验原理 1、静态成员:在编译时创建,一直到程序结束,任何对象都可以访问。对静态数据成员要进行引用性声明和定义性声明。定义形式为:static 数据类型 数据成员名 静态成员函数调用格式:类名∷静态成员函数名( ) 2、友元:外部函数可以例外地访问类的任何私有成员。在类定义外定义,使用类对象引用作参数,可以访问对象的公开、私有成员。 友元关系是单向的、不具有交换性、不具有传递性。 四、程序清单 1、实验内容3的参考程序如下: #include #include class Cat { char names[10]; public: static int HowManyCats; static int GetHowMany( ) { return HowManyCats; } Cat(char n[]) { strcpy(names,n);HowManyCats++; } }; int Cat::HowManyCats=0; void main( ) { Cat c1(\"aaa\"),c2(\"bbb\"); cout<<\"the number is:\"< 2、实验内容4的参考程序如下: #include #include class Student { char names[10]; int math,computer; public: void copy(char n[],int m,int c) { strcpy(names,n); math=m; computer=c; } void display( ) { cout< }; void mysort(Student st[],int n) { int i,j,m,c; char name[10]; for (i=0; i strcpy(st[i].names,st[j].names);st[i].math=st[j].math; st[i].computer=st[j].computer; strcpy(st[j].names,name); st[j].math=m; st[j].computer=c; } } void main( ) { int n,i,m,c; char name[10]; Student st1[10]; cin>>n; for (i=0; i st1[i].copy(name,m,c); } cout<<\"before sort:\"< mysort(st1,n); cout<<\"after sort:\"< } 五、思考题 将实验内容1中的main函数改成如下形式,程序的执行结果又会怎样。 void main( ) { Test t1(10); Test t2(20); t1.Display( ); t2.Display( ); Test::n++; t2.Display( ); } 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务