函数模块和类模块oj题(D)

汇编语言
函数模板用来干嘛?
就是为了解决一个函数可以对不同类型的参数进行处理; 函数业务逻辑一样,但是函数参数类型不一样,也就是一个通用函数。
函数模块
如:
1.
定义一个函数模板,能完成两个相同类型数据比较。比较结果分别是 -1,0,1。当第一个数据小于第二个数据时,返回-1。当第一个数据等于第二个数据时,返回0。第一个数据大于第二个数据时,返回1。
输入
输入四组数据
第一组是两个整数
第二组是两个字符串
第三组是两个浮点数
第四组是两个字符串
输出
分别输出四组数据的比较结果
样例输入
1 2
a b
2.3 1.5
ab ab
样例输出
-1
-1
1
0
1.分析问题:首先这是一个很简单的比较两个数或者字符甚至字符串的大小问题;
2.如何解决问题:在没接触函数模块之前是定义多个函数,对相应类型的进行比较,然后通过函数的模块也就是定义一个函数可以对不同类型参数的比较(比较数据同类型);
3.解题步骤:
1.template告诉C++要进行泛编程,看到T不要随便报错
2.直接输入数据然后调用函数进行比较即可;

#include <iostream>
using namespace std;
template<typename T>
int sove(T a,T b)
{
    if(a>b) return 1;
    else if(a==b) return 0;
    else return -1;
}
int main()
{
    int a,b;
    string c,d;
    double e,f;
    string g,h;
    cin>>a>>b>>c>>d>>e>>f>>g>>h;
    cout<<sove(a,b)<<endl;
    cout<<sove(c,d)<<endl;
    cout<<sove(e,f)<<endl;
    cout<<sove(g,h)<<endl;
}

得到知识:通过函数模块,了解到对不同类型的数据需要做相同方式的处理的解决方式。
2.
定义一个函数模板 T Max_V(T *array, int n),返回数组array 中的组最大值…
输入
输入两组数据
第一组:整数n 及n个整数
第二组:整数n 及n个字符串
输出
每组数据的最大值
样例输入
5
1 2 3 4 5
5
a b c d e

样例输出
5
e
1.分析问题:找出数组中的最大值,找最值问题(不只是一种类型的数组);
2.解决问题:争对于这种问题用函数模块既可以解决,然后函数就是一个普通的找最大值的函数(这里是先进性从小到大排序,然后取出最大值即可);
3.解题步骤:1.经过分析题目得出写一个找最大值的函数模板;2.将输入的数据通过调用函数得出结果即可。

#include <iostream>
#include <algorithm>
using namespace std;
template<typename T>
T Max_V(T *array, int n)
{
    sort(array,array+n);
    return array[n-1];
}
int main()
{
    int a;
    cin>>a;
    int s_i[a];
    for(int i=0;i<a;i++)
        cin>>s_i[i];
    int b;
    cin>>b;
    string s_s[b];
    for(int i=0;i<b;i++)
        cin>>s_s[i];
    cout<<Max_V(s_i,a)<<endl;
    cout<<Max_V(s_s,b)<<endl;
}

类模板
注意:类中的模板函数在类中定义的方式类外定义方式的区分。
3.
定义一个类模板circle ,包含一个数据成员半径(类型需要参数化),包含以下成员函数:1. 构造函数(带参并带默认值)2. 计算周长(有返回值,double)3. 计算面积(有返回值,double)说明:PI=3.14
输入
圆的半径
输出
周长和 面积
样例输入
1
2.2
样例输出
6.28
3.14
13.816
15.1976
1.分析问题:这就是一个简单的类,只是类中的数据成员的类型是不定的,根据不同的成员数据得出相应的数据;
2.解决问题:类中的数据成员r的类型不定,用T申明即可;
3.解题步骤:a.创建类,注意类中数据成员的申明,和构造函数的参数;b.注意定义成员函数的地方及其方式;c.注意不同对象的生成。

#include <iostream>

using namespace std;
#define PI 3.14
template<typename T>
class circle
{
    T r;
public:
    circle(T a):r(a){}
    double zc(){ return 2*PI*r; }
    double area(){ return PI*r*r; }
};
int main()
{
    int a;
    double b;
    cin>>a>>b;
    circle<int> p1(a);
    circle<double> p2(b);
    cout<<p1.zc()<<endl;
    cout<<p1.area()<<endl;
    cout<<p2.zc()<<endl;
    cout<<p2.area()<<endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值