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 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 源码的编译。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. VLD 库的依赖文件 2. 源码编译生成 VLD 库 3. 配置环境变量 4. 使用 VLD 库 1. VLD 库的依赖文件 以 vld2.5.1 版本为例,下载源码 后,源码包中各文件的用途可看本人另一…

    C++ 2023年4月24日
    00
  • C++基础1: 命名空间

    0. 前言 C++是在C语言基础之上的一门语言, 所以学习C++的第一步是思考C++是如何优化C语言设计中的一些不足, 如作用域, IO , 函数, 指针, 宏等 这些内容同时也是为之后学习C++类和对象打基础, 下面说一下C++是如何优化C语言中的作用域 1. 命名空间 在说明命名空间的概念和如何优化C作用域之前, 首先来看一个例子 如图, 编译器报ran…

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

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 配置文件中配置项 ReportEncoding 的使用方法。 同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 配置文件使用说明 2. 设置输出报告的编码格式 2.1 测试代码 2.2 ReportEncoding = ascii 时的输出 2.3 ReportEn…

    C++ 2023年4月18日
    00
  • 信奥赛题1105:数组逆序重存放

    新奥赛一本通,题11051105:数组逆序重存放 时间限制: 1000 ms         内存限制: 65536 KB提交数: 70600                通过数: 47540【题目描述】将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。【输入】两行:第一行数组中元素的个数n(1<n&l…

    C++ 2023年5月5日
    00
  • P6818 [PA2013]Działka 题解

    P6818 [PA2013]Działka 前言 我太菜了。。。。 对着 jiangly 大佬的题解研究了一下午研究了一下午才搞出来(泪目。 作为一个蒟蒻,我就详细的讲一下我对与本题的理解。 题意 本题的的题意描述的还是比较明了。 在二维坐标系中,输入 \(n\) 个点 \(m\) 次询问, 每次询问,给出一个矩阵, 求出矩阵内极大凸包的面积。 题解 1.如…

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

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

    C++ 2023年4月18日
    00
  • 【Qt6】嵌套 QWindow

    在上个世纪的文章中,老周简单介绍了 QWindow 类的基本使用——包括从 QWindow 类派生和从 QRasterWindow 类派生。 其实,QWindow 类并不是只能充当主窗口用,它也可以嵌套到父级窗口中,变成子级对象。咱们一般称之为【控件】。F 话不多讲,下面咱们用实际案例来说明。 这个例子中老周定义了两个类: MyControl:子窗口对象,充…

    C++ 2023年5月2日
    00
  • 【Visual Leak Detector】核心源码剖析(VLD 2.5.1)

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇对 VLD 2.5.1 源码做内存泄漏检测的思路进行剖析。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 源码获取 2. 源码文件概览 3. 源码剖析 3.1 通过 inline hook 修补 LdrpCallInitRoutine 3.2 通过 IAT hook 替换内存操…

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