Experimento C ++ --- número de plantillas de clase

Número de plantillas de clases

Descripción

Defina una plantilla de clase Data, que se utiliza para ajustar los tipos de datos básicos int y double en C ++. incluye:

El valor del miembro de datos es el valor envuelto por el objeto.

Constructor sin argumentos (el valor inicializado es 0) y constructor parametrizado.

Operadores sobrecargados:>, <, + y <<. Entre ellos, "+" devuelve una suma sin cambiar los valores de los dos operandos.

La función miembro setValue se utiliza para establecer el valor de value.

Defina otra plantilla de clase GetResult, que tiene solo 3 funciones miembro estáticas (la siguiente "T" es un parámetro de tipo):

static Data getSum (Data * arr, int num): encuentra la suma de num objetos de datos almacenados en arr y devuelve un objeto de datos compuesto por esta suma.

static Data getMax (Data * arr, int num): Encuentra el valor máximo de num Data objetos almacenados en arr, y devuelve el objeto correspondiente a este valor máximo.

static Data getMin (Data * arr, int num): Encuentra el valor mínimo de num Data objetos almacenados en arr, y devuelve el objeto correspondiente a este valor mínimo.

Aporte

Ingrese varias líneas.

La primera línea M> 0 significa que hay M casos de prueba.

Solo hay M líneas, cada línea comienza con una letra i o d, y la segunda es un entero positivo N> 0. Si la primera letra es i, significa que la fila contiene N datos int; si la primera letra es d, significa que hay N datos dobles en esta fila.

Producción

Excepto por las primeras 6 líneas de salida, el número de líneas de otra salida es igual a M. Cada fila genera 3 datos: el máximo, el mínimo y la suma del caso de prueba correspondiente. Los números reales generan decimales en coma fija y solo 2 decimales.

Entrada de muestra

3
i 3 1 2 3
d 3 1.1 2.2 3.3
i 1 10

Salida de muestra

a + b = 30
max(a, b) = 20
min(a, b) = 10
c + d = -0.96
max(c, d) = 3.14
min(c, d) = -4.10
3 1 6
3.30 1.10 6.60
10 10 10

Título dado código

int main()
{
    
    
    Data<int> iData[1001];
    Data<double> dData[1001];
    int cases, num;
    char ch;
    int u;
    double v;
    Data<int> a(10), b(20);
    Data<double> c(3.14), d(-4.1);
    cout<<"a + b = "<<(a + b)<<endl;
    cout<<"max(a, b) = "<<(a > b ? a : b)<<endl;
    cout<<"min(a, b) = "<<(a < b ? a : b)<<endl;
    cout<<"c + d = "<<(c + d)<<endl;
    cout<<"max(c, d) = "<<(c > d ? c : d)<<endl;
    cout<<"min(c, d) = "<<(c < d ? c : d)<<endl;
    cin>>cases;
    for (int i = 0; i < cases; i++)
    {
    
    
        cin>>ch;
        cin>>num;
        for (int j = 0; j < num; j++)
        {
    
    
            if (ch == 'i')
            {
    
    
                cin>>u;
                iData[j].setValue(u);
            }
            else if (ch == 'd')
            {
    
    
                cin>>v;
                dData[j].setValue(v);
            }
        }
        if (ch == 'i')
        {
    
    
            cout<<GetResult<int>::getMax(iData, num);
            cout<<" "<<GetResult<int>::getMin(iData, num);
            cout<<" "<<GetResult<int>::getSum(iData, num)<<endl;
        }
        else if (ch == 'd')
        {
    
    
            cout<<GetResult<double>::getMax(dData, num);
            cout<<" "<<GetResult<double>::getMin(dData, num);
            cout<<" "<<GetResult<double>::getSum(dData, num)<<endl;
        }
    }
    return 0;
}

código:

#include<iostream>
#include<iomanip>
using namespace std;
template<class T>
class Data{
    
    
	T value;
public:
	Data(){
    
    
		value=0;
	}
	
	Data(T t){
    
    
		value=t;
	}
	
	T operator+(Data<T> &t2){
    
    
		return t2.value+value;
	}
	
	friend bool operator >(Data<T> &d1,Data<T> &d2){
    
    
		return d1.value>d2.value;
	}
	
	friend bool operator <(Data<T> &d1,Data<T> &d2){
    
    
		return d1.value<d2.value;
	}
	
	friend ostream& operator <<(ostream &os,const Data<T> &D){
    
    
		os<<fixed<<setprecision(2)<<D.value;
		//注意,fixed和setprecision在<iomanip>头文件里面 
		return os;
	}
	
	T getValue(){
    
    
		return value;
	}
	
	void setValue(T t){
    
    
		value=t;
	}
	
};

template<class T>
class GetResult{
    
    
public:
	static Data<T> getSum(Data<T> *arr, int num){
    
    
		T t=0;
		for(int i=0;i<num;i++){
    
    
			t+=arr[i].getValue();
		}
		return Data<T>(t);
	}
	
	static Data<T> getMax(Data<T> *arr,int num){
    
    
		T t=arr[0].getValue();
		for(int i=1;i<num;i++){
    
    
			if(arr[i].getValue()>t)t=arr[i].getValue();
		}
		return Data<T>(t);
	}
	
	static Data<T> getMin(Data<T> *arr,int num){
    
    
		T t=arr[0].getValue();
		for(int i=1;i<num;i++){
    
    
			if(arr[i].getValue()<t)t=arr[i].getValue();
		}
		return Data<T>(t);
	}
};

int main()
{
    
    
    Data<int> iData[1001];
    Data<double> dData[1001];
    int cases, num;
    char ch;
    int u;
    double v;
    Data<int> a(10), b(20);
    Data<double> c(3.14), d(-4.1);
    cout<<"a + b = "<<(a + b)<<endl;
    cout<<"max(a, b) = "<<(a > b ? a : b)<<endl;
    cout<<"min(a, b) = "<<(a < b ? a : b)<<endl;
    cout<<"c + d = "<<(c + d)<<endl;
    cout<<"max(c, d) = "<<(c > d ? c : d)<<endl;
    cout<<"min(c, d) = "<<(c < d ? c : d)<<endl;
    cin>>cases;
    for (int i = 0; i < cases; i++)
    {
    
    
        cin>>ch;
        cin>>num;
        for (int j = 0; j < num; j++)
        {
    
    
            if (ch == 'i')
            {
    
    
                cin>>u;
                iData[j].setValue(u);
            }
            else if (ch == 'd')
            {
    
    
                cin>>v;
                dData[j].setValue(v);
            }
        }
        if (ch == 'i')
        {
    
    
            cout<<GetResult<int>::getMax(iData, num);
            cout<<" "<<GetResult<int>::getMin(iData, num);
            cout<<" "<<GetResult<int>::getSum(iData, num)<<endl;
        }
        else if (ch == 'd')
        {
    
    
            cout<<GetResult<double>::getMax(dData, num);
            cout<<" "<<GetResult<double>::getMin(dData, num);
            cout<<" "<<GetResult<double>::getSum(dData, num)<<endl;
        }
    }
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/timelessx_x/article/details/115095102
Recomendado
Clasificación