C++实验二(函数重载,函数模板,类)

1.函数重载编程练习

实验要求:编写重载函数add(),实现对int型,double型,complex型数据的加法。在main()函数中定义不同类型数据,调用测试。

 1 #include<iostream>
 2 using namespace std;
 3 typedef struct{
 4     double real;
 5     double imaginary;
 6 }complex; 
 7 int add(int, int); 
 8 double add(double, double);
 9 complex add(complex, complex);
10 int main()
11 {
12     int a,b;
13     double c,d;
14     complex e,f;// 
15     cout<<"请输入两个整数:";
16     cin>>a>>b;
17     cout<<"这两个整数相加为:"<<add(a,b)<<endl;
18     cout<<"请输入两个小数:"; 
19     cin>>c>>d;
20     cout<<"这两个小数相加为:"<<add(c,d)<<endl;
21     cout<<"请分别输入两个复数的实部和虚部:";
22     cin>>e.real>>e.imaginary>>f.real>>f.imaginary;//输入两个复数的实虚部 
23     cout<<"这两个复数相加为:";
24     cout<<add(e.real,f.real)<<"+"<<add(e.imaginary,f.imaginary)<<"i"<<endl; 
25     return 0;
26 }
27 int add(int h, int i)//整数相加函数 
28 {
29     return (h+i);
30 }
31 double add(double j,double k)//小数相加函数 
32 {
33     return(j+k);
34 } 
35 complex add(complex l,complex m)//复数相加函数 
36 {
37     complex n;//将两个复数实部与虚部的和赋给新的复数 
38     n.real=l.real+m.real;
39     n.imaginary=l.imaginary+m.imaginary;
40     return n; 
41 }

实验结果如下:


2.函数模板编程练习

实验要求:编写实现快速排序函数模板,并在main()函数中,定义不同类型数据,调用测试。

 1 #include<iostream>
 2 using namespace std;
 3 void QuickSort(int a[],int left,int right)
 4 {
 5     if(left<right)//判断能否进行正确排序 
 6     {
 7         int q=left;//将第一个元素下标赋给q
 8         int h=right;//最后一个元素下标赋给h 
 9     int array=a[q];//选中一个值作为中间值来区分整个数组中大于及小于它的部分 
10     while(q<h)
11     {
12         while(q<h&&a[h]>array)//从右边开始一个个排除比中间值大的数,将比中间值小的数拉到最左边
13             h--; 
14         if(q<h)
15         { 
16         a[q]=a[h];
17         q++;
18         }
19         while(q<h&&a[q]<array)//从左边开始一个个比较大小,同上 
20         q++;
21         if(q<h)
22         {
23         a[h]=a[q];
24         h--; 
25         }
26     }
27         a[q]=array;
28         QuickSort(a,left,q-1);//以第一次选中的值为中间值初步排序之后,进行第二次排序
29         QuickSort(a,q+1,right);
30     }
31 }
32 int main()
33 {
34     int n;
35     int a[10]={1,3,4,2,5,6,9,66,43,52};
36     QuickSort(a,0,9);
37     cout<<"该数组由小到大排序的顺序为:";
38     for(n=0;n<10;n++)
39     cout<<a[n]<<ends;
40     return 0;
41 }

实验结果如下:


3.类的定义、实现和使用编程练习

实验要求:设计并实现一个用户类User,并在主函数中使用和测试这个类。每一个用户有用户名(name), 密码(passwd),联系邮箱(email)三个属性。 支持设置用户信息setInfo()。允许设置信息时密码默认为6个1,联系邮箱默认为空串。 支持打印用户信息printInfo()。打印用户名、密码、联系邮箱。其中,密码以6个*方式显示。 支持修改密码changePasswd()。在修改密码前,要求先输入旧密码,验证无误后,才允许修改。 如果输入旧密码时,连续三次输入错误,则提示用户稍后再试,暂时退出修改密码程序。 在main()函数中创建User类实例,测试User类的各项操作(设置用户信息,修改密码,打印用户信息)

  1 #include <iostream>
  2 #include <string>
  3 using namespace std;
  4 class User{
  5   public:
  6     void setInfo(string name,string password="111111",string email="");//定义初始值 
  7     void changeemail(); 
  8     void changePassword();
  9     void printInfo();
 10   private:
 11     string name;
 12     string password;
 13     string email;
 14 };
 15 void User::setInfo(string name1,string password1,string email1)
 16 {
 17     string password0="111111";
 18     int time=0;//控制错误密码次数 
 19     string originalpassword;
 20     cout<<"请输入您的个人信息:(初始密码为六个1)"<<endl;
 21     cout<<"请输入您的用户名:";
 22     cin>>name1;
 23     cout<<"请输入您的密码:";
 24     cin>>originalpassword;
 25     while(originalpassword!=password0)
 26     {
 27     cout<<"初始密码错误,请重新输入:";
 28     cin>>originalpassword;
 29 }
 30     cout<<"请输入您的邮箱:";
 31     cin>>email1;
 32     name=name1;
 33     password=password0;
 34     email=email1;
 35 }
 36 void User::changeemail()
 37 {
 38     int a=0;
 39     string email2;
 40     while(a==0)
 41     {
 42     cout<<"更改邮箱信息提示"<<endl;
 43     cout<<"若暂不更改邮箱,请输入2;更改邮箱请直接输入新邮箱地址"<<endl;    
 44     cin>>email2;
 45     while(email2=="2")
 46     {
 47     a=2;break;
 48 }
 49 if(a!=2)
 50 {
 51     cout<<"成功更改邮箱."<<endl;
 52     email=email2; 
 53     a=2;
 54     }
 55 } 
 56 }
 57 void User::changePassword()
 58 {
 59     string originalpassword;
 60     string password2; 
 61     int time=0;//带动循环,控制输入原始密码错误的次数,使得账户安全性得到一定的保障
 62     cout<<"更改密码信息提示"<<endl;
 63     cout<<"请输入您的原始密码:"; 
 64     cin>>originalpassword;
 65     while (originalpassword!=password)
 66     {
 67         time++;
 68         if(time<3)
 69         {
 70         cout<<""<<time<<"次输入错误,请重新输入:";
 71         cin>>originalpassword;
 72     }
 73     else
 74     {
 75     cout<<"3次输入密码错误,请稍后尝试:"<<endl;//三次输入密码错误后,暂时退出修改密码部分 
 76     break;
 77     }    
 78     }
 79     if(originalpassword==password)
 80         {
 81         cout<<"请输入你的新密码:"<<endl;
 82         cin>>password2;
 83         }
 84     }
 85 void User::printInfo()
 86 {
 87     cout<<"Your name is :"<<name<<endl;
 88     cout<<"Your password is ******"<<endl;
 89     cout<<"Your email is :"<<email<<endl;
 90 }
 91 int main() 
 92 {
 93     User User1;
 94     User1.setInfo("name1","password1","email1");   
 95     User1.printInfo();
 96     User1.changeemail();
 97     User1.changePassword();
 98     User1.printInfo();
 99     cout<<endl;
100     User User2;
101     User2.setInfo("name2","password2","email2");
102     User2.printInfo();
103     return 0;
104 }

实验结果如下:


 参考网站:https://blog.csdn.net/yangchuang93/article/details/80849730

实验小结:

对于本次实验中三个程序,第一个程序存在结构体方面知识的缺陷,第二个程序的算法比较复杂,第三个程序不断完整的过程中,通过类这个结构还可以将程序各方面更加完整。

程序一:在complex上纠结了很久,输入实部虚部再进行相加的时候要带上定义的conplex,反复好几次,错误都出现在complex上使得整个函数重载出现了问题,但是之后重新学习了一遍c中的结构体,发现只是在定义上出现了问题,以后可以注意!

程序二:这个程序一开始尝试书写的时候,是先看了冒泡排序,因为快速排序是冒泡排序的升级,但是算法上存在问题,也是由于算法掌握不够,现在这个程序还不算达到了实验要求,这个程序还可以有很多优化,这是我自己的错误和不足,水平有限,希望能得到同学的提点斧正。

程序三:该程序再书写的结构上不存在问题,只是有些语句的位置一开始错了,接着就发现程序不按照自己既定的方向实现,更改多次后,还算完成了要求。之后学习中希望能够有修改的机会!


 上一个实验的评价地址:

https://www.cnblogs.com/lyc1103/

https://www.cnblogs.com/sunny0202/

https://www.cnblogs.com/dadadacy/

猜你喜欢

转载自www.cnblogs.com/DADABu-21/p/10583707.html