2023.5.5 面向对象程序设计实验报告

实验项目名称:模板

一、实验目的

1、熟练掌握函数模板和类模板的定义格式。

2、熟练运用函数模板和类模板解决实际问题。

二、实验内容

1、复数类Complex有两个数据成员:a和b, 分别代表复数的实部和虚部,并有若干构造函数和一个重载-(减号,用于计算两个复数的距离)的成员函数。 要求设计一个函数模板

template < class T >

double dist(T a, T b)

对int,float,Complex或者其他类型的数据,返回两个数据的间距。

以上类名和函数模板的形式,均须按照题目要求,不得修改

输入格式:

每一行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为Complex类型,若为整型元素,接着输入两个整型数据,若为浮点型元素,接着输入两个浮点型数据,若为Complex型元素,输入两个Complex型数据(a1 b1 a2 b2),输入0时标志输入结束。

输出格式:

对每个输入,每行输出一个间距值。

输入样例:

1 2 5

3 2 4 5 9

2 2.2 9.9

0

 

输出样例:

3

5.83095

7.7

 

 

2、两个类如下设计:类Time有三个数据成员,hh,mm,ss,分别代表时,分和秒,并有若干构造函数和一个重载-(减号)的成员函数。类Date有三个数据成员,year,month,day分别代表年月日,并有若干构造函数和一个重载>(<)(大于号或者小于号)的成员函数。

要求设计一个函数模板

template <class T>

T maxn(T x[], int len);

对int,float,time和date或者其他类型的数据,返回最大值。

main主函数有如下变量的定义:

int intArray[100];

double douArray[100];

Time timeArray[100];

Date dateArray[100];

其中,hh = 3600 ss, mm = 60 ss, year = 365 day, month = 30 day,对于Time和Date类型,数据在转换成ss或者day后进行运算。

输入格式:

每行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3为Time类型,4为Date类型,若为整型元素,接着输入整型数据,以0结束。若为浮点型元素,接着输入浮点型数据,以0结束。若为Time型元素, 输入Time型数据(hh1 mm1 ss1 hh2 mm2 ss2),以0结束。若为Date型数据,输入Date型数据(year1 month1 day1 year2 month2 day2),以0结束。输入-1时表示全体输入结束。

输出格式:

对每次输入,输出一个最大值。

样例输入:

1 4 5 9 3 7 0

2 4.4 5.5 6.9 3.2 2.7 0

3 18 21 22 18 20 31 18 21 49 0

4 2013 5 14 2013 5 15 2013 4 1 0

-1

样例输出:

9

6.9

18 21 49

2013 5 15

 

 

题解:

第一个实验的代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 class Complex {
 5     int real,vir;
 6 public:
 7     Complex(int a,int b):real(a),vir(b){}
 8     ~Complex(){}
 9     
10     double operator - (Complex b1){
11         return sqrt(((double)real-b1.real)*((double)real-b1.real)+((double)vir-b1.vir)*((double)vir-b1.vir));
12     }
13     
14 };
15 
16 template<class T>
17 double dist(T a,T b){
18     double c=a-b;
19     if(c<0) c=-c;
20     return c;
21 }
22 
23 int main(){
24     
25     int op;
26     while(cin>>op,op){
27         if(op==1){
28             int a,b;
29             cin>>a>>b;
30             cout<<dist(a,b)<<'\n';
31         }
32         else if(op==2){
33             float a,b;
34             cin>>a>>b;
35             cout<<dist(a,b)<<'\n';
36         }
37         else{
38             int x1,x2,y1,y2;
39             cin>>x1>>y1>>x2>>y2;
40             Complex a(x1,y1),b(x2,y2);
41             cout<<dist(a,b)<<'\n';
42         }
43     }
44     
45     return 0;
46 }

第二个实验代码:

#include<bits/stdc++.h>
using namespace std;

class Time{
public:
    int hh,mm,ss;
    
    Time(int a=0,int b=0,int c=0):hh(a),mm(b),ss(c){}
    ~Time(){}
    
    bool operator > (Time t2){
        int s1=hh*3600+mm*60+ss;
        int s2=t2.hh*3600+t2.mm*60+t2.ss;
        if(s1>=s2) return true;
        else return false;
    }
    
};

class Date{
public:
    int yy,mm,dd;
    
    Date(int a=0,int b=0,int c=0):yy(a),mm(b),dd(c){}
    ~Date(){}
    
    bool operator > (Date d2){
        int d11=yy*365+mm*30+dd;
        int d22=d2.yy*365+d2.mm*30+d2.dd;
        if(d11>=d22) return true;
        else return false;
    }
    
};

template<class T>
T maxn(T x[],int len){
    T maxx=x[1];
    for(int i=2;i<=len;++i){
        if(x[i]>maxx){
            maxx=x[i];
        }
    }
    
    return maxx;
}

int main(){
    
    ios::sync_with_stdio(false),cin.tie(0);
    
    int op;
    while(cin>>op,op!=-1){
        if(op==1){
            int x,intArray[100],idx=1;
            while(cin>>x,x){
                intArray[idx++]=x;
            }
            int maxx=maxn(intArray,idx-1);
            cout<<maxx<<'\n';
        }
        else if(op==2){
            float x,floatArray[100];
            int idx=1;
            while(cin>>x,x){
                floatArray[idx++]=x;
            }
            float maxx=maxn(floatArray,idx-1);
            cout<<maxx<<'\n';
        }
        else if(op==3){
            int hh,mm,ss,idx=1;
            Time TimeArray[100];
            while(cin>>hh,hh){
                cin>>mm>>ss;
                TimeArray[idx].hh=hh;
                TimeArray[idx].mm=mm;
                TimeArray[idx++].ss=ss;
            }
            Time maxx=maxn(TimeArray,idx-1);
            cout<<maxx.hh<<' '<<maxx.mm<<' '<<maxx.ss<<'\n';
        }
        else{
            int yy,mm,dd,idx=1;
            Date DateArray[100];
            while(cin>>yy,yy){
                cin>>mm>>dd;
                DateArray[idx].yy=yy;
                DateArray[idx].mm=mm;
                DateArray[idx++].dd=dd;
            }
            Date maxx=maxn(DateArray,idx-1);
            cout<<maxx.yy<<' '<<maxx.mm<<' '<<maxx.dd<<'\n';
        }
    }
    
    return 0;
}

原文链接:https://www.cnblogs.com/DanRan02/p/17373642.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:2023.5.5 面向对象程序设计实验报告 - Python技术站

(0)
上一篇 2023年5月4日
下一篇 2023年5月5日

相关文章

  • 【Visual Leak Detector】使用注意事项

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍使用 VLD 时的注意事项。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 官网文档 2. 注意事项 1. 官网文档 可以在 Using-Visual-Leak-Detector 官方文档里看到如何使用 VLD,里面介绍了如何在 Visual C++ 2003/2005/2…

    C++ 2023年4月17日
    00
  • Qt源码阅读(三) 对象树管理

    对象树管理 个人经验总结,如有错误或遗漏,欢迎各位大佬指正 ? @ 目录 对象树管理 设置父对象的作用 设置父对象(setParent) 完整源码 片段分析 对象的删除 夹带私货时间 设置父对象的作用 众所周知,Qt中,有为对象设置父对象的方法——setParent。 而设置父对象的作用主要有,在父对象析构的时候,会自动去析构其子对象。如果是一个窗口对象,如…

    C++ 2023年4月18日
    00
  • 如何将 Spire.Doc for C++ 集成到 C++ 程序中

    Spire.Doc for C++ 是一个专业的 Word 库,供开发人员在任何类型的 C++ 应用程序中阅读、创建、编辑、比较和转换 Word 文档。 本文演示了如何以两种不同的方式将 Spire.Doc for C++ 集成到您的 C++ 应用程序中。 通过 NuGet 安装 Spire.Doc for C++ 通过手动导入库安装 Spire.Doc f…

    C++ 2023年4月27日
    00
  • 【Visual Leak Detector】配置项 SelfTest

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 配置文件中配置项 SelfTest 的使用方法。 同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 配置文件使用说明 2. 设置是否开启泄漏自检 2.1 测试代码 2.2 SelfTest = off 时的输出 2.3 SelfTest = on 时的输出 2.4 …

    C++ 2023年4月18日
    00
  • 32位进程设置大地址(3G)空间

    对应32位应用,我们不做任何设置,我们能用的地址空间其实不足2G,有两种方式设置大地址空间: 一、设置链接选项 二、工具editbin 1.开启方法 (1)利用管理员身份运行”Visual Studio 工具命令提示”程序; (2)输入命令:editbin /LARGEADDRESSAWARE D:\xxx.exe 2.检查是否开启成功 (1)利用管理员身份…

    C++ 2023年5月6日
    00
  • LeetCode 力扣 205. 同构字符串

    给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。 示例 1: 输入:s = “egg”, t = “add”输出:true示例…

    C++ 2023年4月18日
    00
  • 【Visual Leak Detector】配置项 SkipHeapFreeLeaks

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 配置文件中配置项 SkipHeapFreeLeaks 的使用方法。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 配置文件使用说明 2. 设置是否跳过堆内存泄漏检测 2.1 测试代码 2.2 SkipHeapFreeLeaks = no 时的输出 2.3 Skip…

    C++ 2023年4月18日
    00
  • 第三部分:Spdlog 日志库的实现原理

    Spdlog 是一个快速、异步的 C++ 日志库,被广泛应用于 C++ 项目中。在这篇文章中,我们将探讨 Spdlog 日志库的实现原理。 Spdlog 的结构 Spdlog 由五个主要组件构成:Loggers、Sinks、Formatters、Async Logger 和 Registry。每个组件都扮演着不同的角色,共同协作记录并输出日志消息。 Logg…

    C++ 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部