首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于静态指针

2012-10-16 
求助 关于静态指针代码如下:在三处测试处指针的值都不一样 测试1和3的值要相同,怎么办才好?如何将m_pData

求助 关于静态指针
代码如下:在三处测试处指针的值都不一样 测试1和3的值要相同,怎么办才好?如何将m_pData设成静态指针?
#include <iostream>
using namespace std;
template<class T>
class myArray
{
private:
int m_nTotalSize;
int m_nValidSize;
T *m_pData;
public:
myArray(int nSize=3)
{
m_pData=new T[nSize];
m_nTotalSize=nSize;
m_nValidSize=0;
}
void add(T value);
int getSize() const
{
return m_nValidSize;
}
int getTotalSize() const
{
return m_nTotalSize;
}
T getvalue(int pos) const
{
return m_pData[pos];
}
virtual ~myArray()
{
if(m_pData!=NULL)
{
delete [] m_pData;
m_pData=NULL;
}
}
void traverse() const;

};
template<class T>
void myArray<T>::traverse() const
{
  cout<<m_pData<<endl;//[color=#FF0000][/color]测试1
for(int i=0;i<m_nValidSize;i++) std::cout<<m_pData[i]<<"\t";
}
template<class T>
void myArray<T>::add(T value)
{
if(m_nValidSize!=m_nTotalSize)
m_pData[m_nValidSize++]=value;
else
{
T *m_temp=new T[m_nTotalSize];
for (int i=0;i<m_nValidSize;i++)  
m_temp[i]=m_pData[i];
cout<<m_pData<<endl;[color=#FF0000][/color]测试2
delete []m_pData;
m_nTotalSize*=2;
T *m_pData=new T[m_nTotalSize];
for(int i=0;i<m_nValidSize;i++)
m_pData[i]=m_temp[i];
delete []m_temp; 
m_pData[m_nValidSize++]=value;
cout<<m_pData<<endl;//[color=#FF0000][/color]测试3

}
}

int main(void)
{
myArray<int> arr;
arr.add(4);
arr.add(6);
arr.add(7);
  arr.add(5);  
arr.traverse();
return 0;

}

[解决办法]
不要在函数里面再定义局部变量m_pData,否则会屏蔽掉类的成员变量
给你改好了

C/C++ code
#include <iostream>using namespace std;template<class T>class myArray{private:    int m_nTotalSize;    int m_nValidSize;    T *m_pData;    public:    myArray(int nSize=3)    {        m_pData=new T[nSize];        m_nTotalSize=nSize;        m_nValidSize=0;    }    void add(T value);    int getSize() const    {        return m_nValidSize;    }    int getTotalSize() const    {        return m_nTotalSize;    }    T getvalue(int pos) const    {        return m_pData[pos];    }    virtual ~myArray()    {        if(m_pData!=NULL)        {            delete [] m_pData;            m_pData=NULL;        }    }    void traverse() const;};template<class T>void myArray<T>::traverse() const{    cout<<m_pData<<endl;//[color=#FF0000][/color]测试1    for(int i=0;i<m_nValidSize;i++) std::cout<<m_pData[i]<<"\t";}template<class T>void myArray<T>::add(T value){    if(m_nValidSize!=m_nTotalSize)        m_pData[m_nValidSize++]=value;    else    {        T *m_temp=new T[m_nTotalSize];        for (int i=0;i<m_nValidSize;i++)               m_temp[i]=m_pData[i];        cout<<m_pData<<endl;  // [color=#FF0000][/color]测试2            delete []m_pData;        m_nTotalSize*=2;        //T *m_pData=new T[m_nTotalSize];        //这里需要修改对象的m_pData,不是定义一个局部变量,否则无法修改类的m_pData        m_pData=new T[m_nTotalSize];        for(int i=0;i<m_nValidSize;i++)                m_pData[i]=m_temp[i];        delete []m_temp;          m_pData[m_nValidSize++]=value;        cout<<m_pData<<endl;//[color=#FF0000][/color]测试3    }}int main(void){    myArray<int> arr;    arr.add(4);    arr.add(6);    arr.add(7);    arr.add(5);       arr.traverse();    return 0;} 

热点排行