鱼C论坛

 找回密码
 立即注册
查看: 1476|回复: 2

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

[复制链接]
发表于 2014-12-30 14:55:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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[size];
}
template <typename T>
myArray<T>::myArray(const myArray& theArray)
{
        size = theArray.size;
        pelement = new T[size];
        for(int i=0;i<size;i++)
                pelement[i] = theArray.pelement[i];
}
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[index];
}
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[size];
        for(int i=0;i<size;i++)        
                pelement[i] = array.pelement[i];                        
}
template<typename T>
void myArray<T>::Add()
{
        for(int i=0;i<size;i++)
                sum += pelement[i];
}
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*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;”(系统会报错)

[/i][/i][/i][/i][/i][/i]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-7 21:38:06 | 显示全部楼层

回帖奖励 +10 鱼币

#include<stdio.h>

#define N 10

void main()

{

void fun(int num[]);

int num[N];

int i;

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

  scanf("%d",&num[i]);

fun(num);

}

void fun(int num[])

{

int i,sum=0;

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

{

  sum+=num[i];

}

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

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-8 13:56:30 | 显示全部楼层
很简单,因为是私有的,解决办法是一般会在类内部定义一个共有静态的函数来返回私有静态变量的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 14:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表