当前位置:编程学习 > C/C++ >>

编程序创建一个类模板 用c++

可以对不同的数据类型的数组分别进行初始化、添加数据、求和、求平均值、显示数组等功能。
追问:不知道这个是什么意思#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#那个更有前途?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,