Qinteens 2022-05-07 15:08 采纳率: 50%
浏览 58

关于类模板,为什么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;

}
  • 写回答

1条回答 默认 最新

  • kinghero123456 2022-05-07 15:26
    关注

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

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月7日

悬赏问题

  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题