关于类模板,为什么char类型不能相加减?

问题就在于输入char类型时无法相加减,也无法求平均值。

//编程序创建一个类模板,可以对不同的数据类型的数组分别进行初始化、
//添加数据、求和、求平均值、显示数组等功能。
代码如下:

#include<iostream>
using namespace std;
//#include<string>
template <class T>
class number
{
public:
    number(int i);//初始化数组
    ~number();
    void addate(int len);//添加数据
    T sum();//求和
    T aver();//求平均值
    void print();//显示数据
private:
    double size;//数组数目
    T* element;//数组
};
//template<class T>number<T>::number (){} 
template <class T>number<T>::number (int i)//初始化数组
{
    if (i > 1)
        size = i;
    else
        size = 1;
    //size = i;
    element = new T[size];
    
}
template<class T>number<T>::~number()
{
    delete []element;
}
//以上也可以写成template<typename T>number<T>::~number(){}
template<class T>void number<T>::addate(int len)
{
    cout << "请输入数组:" << endl;
    for (int i = 0; i < len; i++)
    {
        cin >> element[i];
    }
}
template <class T>T number<T>::sum()
{
    T summ = 0;//T summ = element[0];
    for (int i = 0; i < size; i++)
    {
        summ += element[i];
    }
    //cout << ('A' + 'F') / 2;
    return summ;//cout << "总和为:"<<summ<<endl;
}
template <class T>T number<T>::aver()
{
    return sum() / size;//return sum()/size;会是int类型
}
template <class T>void number<T>::print()
{
    for (int i = 0; i < size; i++)
    {
        cout << "element[" << i << "]=" << element[i] << " ";
    }
}
//template <typename T>//一直出错原因:写了模板但是main函数没有用到
int main()
{
    char z; int z1;
    cout << "char类型数组数目有:";
    cin >> z1;
    number<char>c(z1);
    c.addate(z1); //int temp = c.aver();
    cout << "总和:" << c.sum() << endl;
    cout << "平均值为:" << c.aver() << endl;
    cout << "数组显示:";
    c.print();
    cout << endl;

    int x;
    cout << "int类型数组数目有:";
    cin >> x;
    number<int> a(x);
    a.addate(x);
    cout <<"总和:"<<a.sum()<<endl;
    cout <<"平均值为:"<<a.aver()<<endl;
    cout << "数组显示:" ;
    a.print();
    cout << endl;

    double y;
    cout << "double类型数组数目有:";
    cin >> y;
    number<double> b(y);
    b.addate(y);
    cout << "总和:" << b.sum() << endl;
    cout << "平均值为:" << b.aver() << endl;
    cout << "数组显示:";
    b.print();
    cout << endl;

}

char类型加减是ASSIC码加减,例如 cout << ('A' + 'F') / 2; (65 + 70) / 2 最后为 67
如果想输出如下:类型转换
cout << "总和:" << (int)c.sum() << endl;
cout << "平均值为:" << (int)c.aver() << endl;