面B实验程序完整版

  • 格式:docx
  • 大小:103.73 KB
  • 文档页数:13

第一次实验四.实验源程序及实验结果#include<iostream>#include<string>using namespace std;class CTeacher;class CStudent //学生类{ public:CStudent(int ,string ,double );friend void Display(CStudent &); //定义友元函数friend CTeacher; //定义友元类private:int ID; //学号string Name; //姓名double Score; //成绩};CStudent::CStudent(int a1,string a2,double a3): ID(a1),Name(a2),Score(a3) {} //构造函数初始化数据成员void Display(CStudent &a) //输出姓名、成绩、等级{ int d;d=a.Score/10;cout<<a.ID<<"\t"<<<<"\t"<<a.Score<<"\t";switch (d){case 10:case 9:cout<<"优秀"<<endl;break;case 8:cout<<"良好"<<endl;break;case 7:cout<<"中等"<<endl;break;case 6:cout<<"及格"<<endl;break;default :cout<<"不及格"<<endl;break;}}class CTeacher //定义教师类{public:void Modify(CStudent &);void Displays(CStudent &);};void CTeacher::Modify(CStudent &b) //修改成绩double chengji;cout<<"输入分数:";cin>>chengji;b.Score=chengji;cout<<"修改成功!"<<endl;}void CTeacher::Displays(CStudent &c) //输出需要查找的学生信息{Display(c);}int main(){ cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"\t"<<"成绩"<<"\t"<<"等级"<<endl;cout<<"-------------------------------------"<<endl;CStudent t1(1,"LeBron James",75); //定义一个学生类的对象CStudent t2(2,"Micheal Jordan",98);CStudent t3(3,"Chris Bosh",55);CStudent t4(4,"Stephen Curry",80);CTeacher m; //定义一个教师类的对象Display(t1); //输出学生信息Display(t2);Display(t3);Display(t4);int xuhao;cout<<"请输入要修改分数的学生的序号:";//修改成绩cin>>xuhao;switch(xuhao){case 1:m.Modify(t1);break;case 2:m.Modify(t2);break;case 3:m.Modify(t3);break;case 4:m.Modify(t4);break;}int v;cout<<"请输入要查找成绩的学生的序号:";//查找成绩cin>>v;switch(v){case 1:m.Displays(t1);break;case 2:m.Displays(t2);break;case 3:m.Displays(t3);break;case 4:m.Displays(t4);break;return 0; }实验结果第三次实验运算符重载对字符串进行比较和运算设计思路:设计一个字符串的类,把所要进行的各种运算和操作设计成类的成员函数,另外设计一个字符串类型的数据,作为数据成员,然后,详细写出每个成员函数的实现方法,再在主函数中进行调用,实现字符串之间的运算。

源程序及实验结果#include<iostream.h> //为了实现运算符重载函数作为友元函数用.H 文件//using namespace std;#include<string>class String //字符串类{public:String(char*b); //构造函数的声明String();friend int operator>(String &s1,String &s2); //将运算符重载函数声明为友元函数friend int operator<(String &s1,String &s2);friend int operator==(String &s1,String &s2);void display() //用于输出类的数据成员{cout<<a<<endl;}private: //数据成员一个字符串char *a;};String::String(char *b): a(b) {} //带参数的构造函数String::String() //不带参数的构造函数{a="ABCD";}int operator>(String &s1,String &s2) //对‘>’进行运算符重载{ return strcmp(s1.a,s2.a); }int operator<(String &s1,String &s2) //对‘<’进行运算符重载{ return strcmp(s1.a,s2.a); }int operator==(String &s1,String &s2) //对‘==’进行运算符重载{ return strcmp(s1.a,s2.a); }void main() //主函数{String t1("aa"),t2("a"); //定义两个字符串类的对象并赋初值cout<<"要进行比较的两个字符串为:"<<endl;cout<<"t1:";t1.display(); //输出显示要进行比较的两个字符串cout<<"t2:";t2.display();cout<<"式子:t1>t2"<<"\t";cout<<((t1>t2)>0?"TRUE":"FALSE")<<endl; //进行'>'的比较cout<<"式子:t1<t2"<<"\t";cout<<((t1<t2)<0?"TRUE":"FALSE")<<endl; //进行'>'的比较cout<<"式子:t1==t2"<<"\t";cout<<((t1==t2)==0?"TRUE":"FALSE")<<endl; //进行'=='的比较cout<<"字符串比较运算结束!"<<endl;}运行结果:派生类中构造函数与析构函数#include<iostream>using namespace std;class A //基类A{public:A(){a=0,b=0;flag=0;cout<<"A0"<<endl;}A(int i){a=i,b=0;flag=1;cout<<"A1"<<endl;}A(int i,int j){a=i,b=j;flag=2;cout<<"A2"<<endl;}~A(){cout<<"~A"<<flag<<endl;}void display(){cout<<"a="<<"b="<<b;} private:int a,b;int flag;};class B:public A{public:B(){c=0;flag=0;cout<<"B0"<<endl;}B(int i):A(i){c=0;flag=1;cout<<"B1"<<endl;}B(int i,int j):A(i,j){c=0;flag=2;cout<<"B2"<<endl;}B(int i,int j,int k):A(i,j){c=k;flag=3;cout<<"B3"<<endl;}~B(){cout<<"~B"<<flag<<endl;}void display(){A::display();cout<<"c="<<c<<endl;} private:int c;int flag;};int main(){B b1;B b2(1);B b3(1,3);B b4(1,3,5);b1.display();b2.display();b3.display();b4.display();return 0;}.关于虚函数的一些应用#include<iostream>using namespace std;class A{ //基类public:A() //不带参数的构造函数{a=0;}virtual void display() //定义一个虚函数{cout<<"A的虚函数!a="<<a<<endl;}void display1() //定义一个普通成员函数{cout<<"非虚函数a="<<a<<endl;}private:int a; //定义私有一个成员};class B:public A{ //中间派生类公有方式public:B():A(){b=1;}virtual void display(){cout<<"B的虚函数!b="<<b<<endl;}void display1(){cout<<"非虚函数b="<<b<<endl;}private:int b;};class C:private A{ //直接派生类私有方式public:C():A(){c=2;}virtual void display(){cout<<"C的虚函数!c="<<c<<endl;}void display1(){cout<<"非虚函数c="<<c<<endl;}private:int c;};class D:public B{ //多级派生类公有方式public:D():B(){d=3;}virtual void display(){cout<<"D的虚函数!d="<<d<<endl;}void display1(){cout<<"非虚函数d="<<d<<endl;}private:int d;};void main() //主函数{A*ceshi; //定义基类指针A a1; //分别为ABCD四个类定义一个对象B b1;C c1;D d1;cout<<"测试A"<<endl; //基类指针调用可行ceshi=&a1; //指针指向对象aceshi->display(); //尝试调用该对象的成员函数ceshi->display1();/*中间派生类B 公有方式*/cout<<"测试B"<<endl; //结果证明在基类中声明为虚函数的b1.display(); //一般对象可调用虚函数b1.display1(); //一般对象不可调用非虚函数ceshi=&b1; // 函数,指针指向的是对象的函数,而普通ceshi->display(); //函数,在调用指针时,指向的是基类的函数ceshi->display1(); //作为中间类,仍然可以通过指针调用虚函数/*cout<<"测试C"<<endl; 中间派生类C 私有方式ceshi=&c1; 私有方式派生的类不可转换,因为在派生ceshi->display(); 之后,基类的公有部分变私有,外部不可访问ceshi->display1();*//* 多级派生类D*/cout<<"测试D"<<endl; //在基类中声明为虚函数的函数,指针指ceshi=&d1; //向的是对象的函数,否则,指向基类的函数ceshi->display();ceshi->display1();cout<<"测试结束"<<endl;}有关模板的实验#include<iostream>#include<string>using namespace std;template<typename T>T minute(T A,T B) //函数模板输出两个中的最小值{return (A>B?B:A);}template<class LEI>class Cout{public:Cout(LEI*a,LEI d){b=a;c=d;}LEI AVER(){return e/c;}LEI SUM(){for(int i=1;i<c;i++ )b[i]=b[i]+b[i-1];e=b[i-1];return e;}private:LEI *b;LEI c;LEI e;};int main(){/*函数模板部分*/int i1=5,i2=27,i;/*int i,i1,i2; //整数比较大小可输入cin>>i1>>i2;*/double d1=3.6,d2=3.7,d;/*double d1,d2,d; //双精度型数据比较大小可输入cin>>d1>>d2;*/string s1="abc",s2="abC",s;/*string s1,s2,s; //字符串型数据比较大小可输入cin>>s1>>s2;*/cout<<"最小的值是:"<<endl;i=minute(i1,i2); //调用函数模板d=minute(d1,d2);s=minute(s1,s2);cout<<i<<endl; //输出比较结果cout<<d<<endl;cout<<s<<endl;/*类模板部分*/int a[10]={0,1,2,3,4,5,6,7,8,9};//整型数组Cout <int>zheng(a,10); //定义类的对象指定类型为intcout<<"和为:";cout<<zheng.SUM()<<endl;//求数组和cout<<"平均值为:";cout<<zheng.AVER()<<endl; //求数组平均值小数点部分丢失double aa[4]={1.2,1.4,1.6,1.8};//双精度数组Cout <double>shuang(aa,4); //定义类的对象指定类型为double cout<<"和为:";cout<<shuang.SUM()<<endl;//求数组和cout<<"平均值为:";cout<<shuang.AVER()<<endl; //求数组平均值return 0;}。