ccvvpp 发表于 2014-12-30 14:55:30

类模板的私有静态变量怎么在main函数中调用?

本帖最后由 ccvvpp 于 2014-12-31 15:11 编辑

#include<iostream>
using namespace std;
template<typename T>
class myArray
{
public:
      myArray(int s);
      myArray (const myArray& theArray);
      ~myArray();
      T& operator[](int index);
      myArray& operator=(const myArray& array);
      void Add();
      static T& mean();
private:
      int size;
      T* pelement;
      static int num;
      static T sum;
};
template<typename T> int myArray<T>::num = 0;
template<typename T> T myArray<T>::sum;
template <typename T>
myArray<T>::myArray(int s)
{
      size = s;
      num +=size;
      pelement = new T;
}
template <typename T>
myArray<T>::myArray(const myArray& theArray)
{
      size = theArray.size;
      pelement = new T;
      for(int i=0;i<size;i++)
                pelement = theArray.pelement;
}
template<typename T>
myArray<T>::~myArray()
{
      delete[] pelement;
}
template<typename T>
T& myArray<T>::operator[](int index)
{
      if(index<0||index>size)
                throw out_of_range("out of range");
      return pelement;
}
template<typename T>
myArray<T>& myArray<T>::operator=(const myArray& array)
{
      if(&array==this)                              
      return *this;
      size = array.size;
      if(pelement) delete[] pelement;      
      pelement = new T;
      for(int i=0;i<size;i++)      
                pelement = array.pelement;                        
}
template<typename T>
void myArray<T>::Add()
{
      for(int i=0;i<size;i++)
                sum += pelement;
}
template<typename T>
T& myArray<T>::mean()
{
      T m = sum/num;
      return m;
}
void main()
{
      myArray<double> d1(5);
      for(int i=0;i<5;i++)
                d1 = i*i;
      d1.Add();
      myArray<double> d2(4);
      for(i=0;i<4;i++)
                d2 = i;
      d2.Add();
      cout<<"mean is:"<<myArray<double>::mean()<<endl;
}

运行结果是:
mean is:4

请教一下,为什么不能在main函数内直接用类调用sum和num?
比如像“      cout<<"num is:"<<myArray<int>::num<<endl;”(系统会报错)

海豚哥 发表于 2015-1-7 21:38:06

#include<stdio.h>

#define N 10

void main()

{

void fun(int num[]);

int num;

int i;

for(i=0;i<N;i++)

scanf("%d",&num);

fun(num);

}

void fun(int num[])

{

int i,sum=0;

for(i=0;i<N;i++)

{

sum+=num;

}

printf("sum=%d\n",sum);

}

l_g_g_l 发表于 2015-1-8 13:56:30

很简单,因为是私有的,解决办法是一般会在类内部定义一个共有静态的函数来返回私有静态变量的值
页: [1]
查看完整版本: 类模板的私有静态变量怎么在main函数中调用?