鱼C论坛

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

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

[复制链接]
发表于 2014-12-31 15:10:57 | 显示全部楼层 |阅读模式
5鱼币
#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
回复

使用道具 举报

发表于 2014-12-31 20:33:38 | 显示全部楼层
如果可以的话,私有有没有任何意义了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-18 17:04:14 | 显示全部楼层
本帖最后由 ?Цtm 于 2015-1-18 17:34 编辑

#include<iostream>
class myArray
{
public:
    int getnum()
    {
        return num;
    }
    int getsum()
    {
        return sum;
    }
    void setnum(int i)
    {
        num = i;
    }
    void setsum(int i)
    {
        sum = i;
    }
private:
    int num;//类私有成员变量
    int sum;
};

int main()
{
    myArray my;
    int x=100,y=200;
    my.setnum(x);//私有成员变量赋值
    my.setsum(y);
    std::cout << my.getnum();//私有成员变量读取
    std::cout << std::endl;//换行
    std::cout << my.getsum();
    std::cin >> x;//等待用户输入避免程序退出
    return 0;
}
类私有变量没办法直接访问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 13:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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