编程序创建一个类模板 用c++
可以对不同的数据类型的数组分别进行初始化、添加数据、求和、求平均值、显示数组等功能。
追问:不知道这个是什么意思#include <cstdarg>
可以不要吗?
可以对不同的数据类型的数组分别进行初始化、添加数据、求和、求平均值、显示数组等功能。
追问:不知道这个是什么意思#include <cstdarg>
可以不要吗?
答案:这里提供了可变参数的set_value#include <iostream>
#include <cstdarg>
using namespace std;template <class T>
class Array
{
private:
T *p;
unsigned int size;
public:
Array(unsigned int size);
~Array();
int set_value(T head, ...);
T sum();
T average();
void show();
};template <class T>
Array<T>::Array(unsigned int size)
{
p = new T [size];
Array::size = size;
}template <class T>
Array<T>::~Array()
{
delete p;
}template <class T>
int Array<T>::set_value(T head, ...)
{
unsigned int i;
va_list arglist;
va_start(arglist, head);
p[0] = head;
for(i = 1; i != size; i++)
{
p[i] = va_arg(arglist, T);
}
va_end(arglist);
return 0;
}template <class T>
T Array<T>::sum()
{
T ret = 0;
unsigned int i;
for(i = 0; i != size; i++)
{
ret += p[i];
}
return ret;
}template <class T>
T Array<T>::average()
{
return sum() / size;
}template <class T>
void Array<T>::show()
{
unsigned int i;
for(i = 0; i != size; i++)
{
cout << p[i] << " ";
}
cout << endl;
}int main()
{
Array<int> obj(3);
obj.set_value(1, 2, 3);
cout << "sum: " << obj.sum() << endl;
cout << "average: " << obj.average() << endl;
obj.show();
return 0;
}
// arrayex.h
#pragma once
#include <iostream>
using namespace std;
template <class T>
class CArrayEx
{
public:
// 构造函数,用固定值初始化
CArrayEx(T Initial,int nSize)
{
m_nSize=(nSize>1)?nSize:1;
m_pArray=new T[m_nSize];
for(int i=0;i<m_nSize;i++)
m_pArray[i]=Initial;
}
// 构造函数,用数组初始化
CArrayEx(T arr[], int nSize)
{
m_nSize=(nSize>1)?nSize:1;
m_pArray=new T[m_nSize];
for(int i=0;i<m_nSize;i++)
m_pArray[i]=arr[i];
}
// 计算数组的平均
T CalculateMean()
{
T sum = 0;
for(int i=0;i<m_nSize;i++)
sum +=m_pArray[i];
return (T)(sum/(double)m_nSize);
}
// 显示数组
void Show(const int nNumElems)
{
for(int i=0;i<nNumElems;i++)
cout<<m_pArray[i]<<' ';
cout<<endl;
}
// 析构函数
virtual~CArrayEx(){delete[ ] m_pArray;}
// 重载[]操作符,实现取值或者更改原值
T &operator [](int nIndex){return m_pArray[nIndex];}
protected:
T* m_pArray;
int m_nSize;
};
// Test.cpp
#include "stdafx.h"
#include "ArrayEx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int arr[5]={1,2,3,4,5};
//CArrayEx<int> ar(0,5);
// 用数组进行构造
CArrayEx<int> ar(arr, 5);
ar.Show(5);
cout<<ar.CalculateMean()<<endl;
return 0;
}
上一个:100分求c++大牛!!
下一个:C++和C#那个更有前途?