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

实验目的
1. 掌握c++中函数的声明、定义、调用和参数传递方式
2. 掌握c++中带有默认形参值的函数声明和定义方法
3. 理解函数重载,掌握c++中函数重载的实现方式
4. 理解函数模板,掌握c++中函数模板的简单使用
5. 理解面向对象的抽象和封装,掌握c++中类的定义、实现和使用方法。
实验准备
实验前,请围绕以下内容复习教材第3章和第4章相应知识。
1. 函数的声明、定义、调用、参数传递方法
2. 带有默认形参值的函数
3. 函数重载
4. 函数模板(9.1.1节 + 9.3节)
    其中,9.3节,理解3个常用的排序算法和两个常用的查找算法。
5. 类的定义、实现和使用方法
    结合源码示例employ.cpp(见本文档附2)中简单员工类Employee的定义、实现和使用,复习和理解类的定 义、实现和使用方法,以及类的成员的访问权限(public成员,private成员)。
实验内容
 Part1: 验证性内容
  在c++中编写程序文件,添加例9-11,例9-12, 例9-13,例9-14, 例9-15中的定义好的函数模板,在main() 函数中定义不同数据类型,观察函数模板的类型被实例化及调用的过程,借此体会函数模板在实际应用中的 优势。
     可以写在一个文件中测试,也可以分开在多个文件中。初学者,建议每个算法示例分开测试,便于在出 现问题时缩小调试范围。
     可以利用编程软件(如codeblocks、vs2017等)内置的调试工具通过函数调用栈观察。
Part2: 编程练习
  函数重载编程练习
     编写重载函数add(),实现对int型,double型,Complex型数据的加法。在main()函数中定义不同类型 数据,调用测试。(附程序框架)
  函数模板编程练习
     编写实现快速排序函数模板,并在main()函数中,定义不同类型数据,调用测试。(算法可参考)
  类的定义、实现和使用编程练习
      设计并实现一个用户类User,并在主函数中使用和测试这个类。具体要求如下:
      每一个用户有用户名(name), 密码(passwd),联系邮箱(email)三个属性。
      支持设置用户信息setInfo()。允许设置信息时密码默认为6个1,联系邮箱默认为空串。
      支持打印用户信息printInfo()。打印用户名、密码、联系邮箱。其中,密码以6个*方式显示。
      支持修改密码changePasswd(),。在修改密码前,要求先输入旧密码,验证无误后,才允许修改。 如果输入旧密码时,连续三次输入错误,则提示用户稍后再试,暂时退出修改密码程序。
      在main()函数中创建User类实例,测试User类的各项操作(设置用户信息,修改密码,打印用户信 息)
      User类功能的完善及拓展丰富(===选做===) 自行设计。在前述内容的基础上,对代码和功能做完善,使其更符合实际应用场景。比如: 支持修改邮箱;用户设置邮箱时对邮箱地址合法性的检测提示(比如是否包含@) 用户更       改密码时,当用户输入旧密码和新密码时,屏幕上均以星号代替,而不会显示用户实际 输入的密码;设置密码时对密码的长度、合法性进行有效性校验,等等 。。。 (附程序框架及预期运行结果截图)
实验结论
「Part2: 编程练习」中3道练习的c++程序源码及运行结果截图。
 函数重载编程练习
#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 x,y;
    cout<<"Enter two integers:";
    cin>>x>>y;
    cout<<"The sum of them is "<<add(x,y)<<endl;
    double m,n;
    cout<<"Enter two decimals:";
    cin>>m>>n;
    cout<<"The sum of them is "<<add(m,n)<<endl;
    Complex a,b;
    cout<<"Enter the real part of two complex number:";
    cin>>a.real>>b.real;
    cout<<"Enter the imaginary part of two complex number:";
    cin>>a.imaginary>>b.imaginary;
    cout<<"The sum of them is "<<(add(a,b).real)<<"+"<<(add(a,b).imaginary)<<"i"<<endl;
    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 sum;
    sum.real=x.real+y.real;
    sum.imaginary=x.imaginary+y.imaginary;
    return sum;
}
View Code

运行结果如下

函数模板编程练习

#include<iostream>
using namespace std;
void quickSort(int a[],int m,int n);
int quickSort1(int a[],int m,int n);
int main(){
    int a[]={99,1,4,21,61,12,88,94,614,56};
    int m=0,n=(sizeof(a)/4)-1;
    quickSort(a,m,n);
    for(int i=0;i<10;i++){
        cout<<a[i]<<" ";
    }
}
void quickSort(int a[],int m,int n){
    if(m<n){
        int q=quickSort1(a,m,n);
        quickSort(a,m,q);
        quickSort(a,q+1,n);
    }
}
int quickSort1(int a[],int m,int n){
    int select=m,j=n,i=m,b,c;
    while (i!=j){
        while(a[j]>a[select]&&i<j)
            --j;
        while((a[i]<a[select])&&(i<j))
            ++i;
        if (i<j){
            b=a[j];
            a[j]=a[i];
            a[i]=b;
        }
    }
        c=a[select];
        a[select]=a[i];
        a[i]=c;
        return i;
}
View Code

运行结果如下

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

#include<iostream>
#include<string>
using namespace std;
class User{
    public:
        void setInfo(string Original_name,string Original_password="111111",string Original_email="");
        void changePassword();
        void printInfo();
        private:
            string Name;
            string Password;
            string Email;
};
void User::setInfo(string Original_name,string Original_password,string Original_email){
    Name=Original_name;
    Password=Original_password;
    Email=Original_email;
}
void User::changePassword(){
    string Input_password,New_password;
    while(true){
        int n=0;
        cout<<"Enter the old password: ";
        cin>>Input_password;
        while(Input_password!=Password&&n<3){
            cout<<"Password input error,Please re-enter again: ";
            cin>>Input_password;
            n++;
            if(n==2){
              cout<<"Please try after a while."<<endl;
              break;
        }
        }
        
        if(Input_password==Password){
            cout<<"Please enter a new password: ";
            cin>>New_password;
            Password=New_password;
            break;
        }
    }
    
}
void User::printInfo(){
    cout<<"Name: "<<Name<<endl;
    cout<<"Password: "<<"******"<<endl;
    cout<<"Email: "<<Email<<endl;
}
int main(){
    cout<<"tseting 1......"<<endl;
    User user1;
    user1.setInfo("Leonard");
    user1.printInfo();
    user1.changePassword();
    user1.printInfo();
    cout<<"testing 2......"<<endl<<endl;
    User user2;
    user2.setInfo("Jonny","92197","xyz@hotmail.com");
    user2.printInfo();
    return 0;
}
View Code

运行结果如下

转载于:https://www.cnblogs.com/fearless04/p/10590986.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值