实验二:函数重载,模板,简单类的定义和实现

【实验结论】

#函数重载

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

#include<iostream>
using namespace std;
struct complex{
    double real;
    double imaginary;
    
};
int add(int,int);
double add(double,double);
complex add(complex,complex);
int main(){
    int m,n;
    
    cout<<"Enter two number:";
    cin>>m>>n;
    cout<<"Their sum:"<<add(m,n)<<endl;
    
    double a,b;
    cout<<"Enter two number:";
    cin>>a>>b;
    cout<<"Their sum:"<<add(a,b)<<endl;
    
    complex c,d;
    cout<<"Enter two number:";
    cin>>c.real>>c.imaginary;
    cin>>d.real>>d.imaginary;
    add(c,d);
    
    return 0;
}
int add(int x,int y){
    return x+y;
}
double add(double x,double y){
    return x+y;
}
complex add(complex x,complex y){
    complex w;
    w.real=x.real+y.real;
    w.imaginary=x.imaginary+y.imaginary;
    cout<<"Their sum:"<<w.real<<"+"<<w.imaginary<<"i"<<endl;
    return w;
}

#函数模板

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

关于排序的函数quicksort的程序,此题分为两部分来写,分为排序的quicksort函数与主函数main函数。然后生成项目。

#ifndef  HEADER_quicksort_H
#define  HEADER_quicksort_H
template<class T>
void quicksort(T a[],int l,int r){
    
    if(l<r){
     int i=l,j=r;
     T k=a[l];
        
        while(i<j){
            while(i<j&&a[j]>=k)
                j--;
            
            a[i]=a[j];
            while(i<j&&a[i]<k)
                i++;
            
            a[j]=a[i];
        }
    
    a[i]=k;
    quicksort(a,l,i-1);
    quicksort(a,i+1,r);
    }
}
#endif 
#include<iostream>
#include"quicksort.h"
using namespace std;

int main()
{
    int a[9] = {56,78,99,77,7,49,11,28,12},i;
 
    quicksort(a, 0, 8);
 
    for( i = 0; i <9; i++)
    {
        cout << a[i] <<" ";
    }
    cout<<endl;
    double b[6]={66,11,99,77,28,12};
    quicksort(b,0,5);
    
    for(int j= 0; j<6; j++)
    {
        cout << b[j] <<" ";
    }
    
     
    return 0;
}

#简单类的定义和实现

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

#include <iostream> 
#include <string> 
using namespace std;
// User类的声明 
class User {
    public: 
       void setInfo(string name0,string passwd0="111111",string email0="");// 声明带有默认形参值的成员函数setInfo() 
       
    // 密码默认值为6个1 
       // 邮箱默认值为空串 
      void changePasswd();
      void printInfo(); 
    private:
        string name;       
        string passwd;     
        string email;   
}; 
void User::setInfo(string name0,string passwd0,string email0){// User类的实现 
     name=name0;
     passwd=passwd0;// 成员函数setInfo()的实现 
     email=email0;// 功能:设置用户名(name), 密码(passwd), 联系邮箱(email) 
}


 
void User::changePasswd(){// 成员函数changePasswd()的实现 
    string passwd1;
    int i;
    for(i=0;i<3;i++){
    cout<<"请输入原密码:";
    cin>>passwd1;// 功能:修改密码 
    if(passwd1=="111111"){// 要求:在修改密码前,要求先输入旧密码,验证无误后,才允许修改。 
      cout<<"请输入新密码:";// 如果输入旧密码时,连续三次输入错误,则提示用户稍后再试,暂时退出修改密码程序。 
      cin>>passwd1;
      passwd=passwd1;
      cout<<"修改密码成功"<<endl;
      break;
    }
    else
        cout<<"密码错误,请重新输入"; 

}
    if(i==3){
        cout<<"输入错误已达上限,请稍后再试"<<endl; 
    }
}

        
void User::printInfo(){
    cout<<"name:"<<name<<endl;
    cout<<"passwd:"<<"******"<<endl;// 成员函数printInfo()的实现 
    cout<<"email:"<<email<<endl;// 功能:打印用户信息 
}// 要求: 密码以6个*显示 
// 补足代码 


// 在主函数中测试User类 
// 用User类创建对象,测试类的功能 
int main()
{
    cout << "testing 1......" << endl;
    // 测试1
    User user1;
    user1.setInfo("Leonard"); 
    user1.printInfo();
    user1.changePasswd();
    user1.printInfo();
    cout << endl << "testing 2......" << endl << endl;
    // 测试2
    User user2;
    user2.setInfo("Jonny","92197","[email protected]");
    user2.printInfo();
    return 0; 
}

实验总结:

在此次的三个实验中,(1)我学习到了如何使用重载函数,并且也复习到了关于复数相加减所需要注意的问题,在两个以上的函数中,具有相同的函数名,但是形参的个数或者类型不同,重载函数形参必须不同,个数不同或者类型不同。

(2)在关于类函数的实验中,我在上课老师讲的基础上有了实践的过程,类的访问控制属性一般分为共有类型,私有类型和保护类型,在类的定义中,具有不同访问属性的成员,可以按任意顺序出现。成员函数的实现:返回值类型  类名::函数成员名(参数表)。类的成员函数也可以有默认形参值,且类成员函数的默认值一定要写在类定义中,不能写在之外的函数实现中。

(3)关于快速排序函数,我看了有些人的程序将其分为三个部分来构成一个项目,与老师所描述的相同,我用的是两个程序,主要是因为自己的理解也只能写出两个来了,但是还是达到了需要的目的,在写这个程序时,从网上找了许多的例子关于如何实现快速排序,最后才写出来一个,过程比较痛苦,最后的main函数也分成了两个不同类型的数组,达到了题目要求,并且参照书上的例子,运用了template<class T>定义了一个数组模板。快速排序是冒泡排序的一种改进,也是其更好的一种实现过程,他是将一组数组中选取第一个数作为参照,先从后往前,然后再从前往后找到比他大和小的数字,然后在将符合条件的数放置于对应位置的a[i]或a[j]处。一个项目中要寻找的文件使用""来进行运行。

猜你喜欢

转载自www.cnblogs.com/mxueyyqx/p/10585933.html