风云it界

代码改变世界,软件横行网络

   :: 首页 :: 联系 ::  :: 管理

公告

个人简介: 小吴,据说酷爱软件,爱网络,爱游戏,爱数码,爱科技,各种控,各种宅……

常用链接

最新评论

阅读排行榜

评论排行榜

核心提示:
#include "stdafx.h"
#include <iostream>
using namespace std;
template <class T>
class MyArray
{
int len;
public:
T *data;
MyArray()
{
data = NULL;
len = 0;
}
~MyArray()
{
delete[] data;
}
T& operator [](int index);
void push(T d);
};
template <class T>
T& MyArray<T>::operator [](int index)
{
if(index<0||index>(len-1))
{
cout<<"Bad subscript!"<<endl;
exit(1);
}
return data[index];
}
template <class T>
void MyArray<T>::push(T d)
{
T *pdata = data;
data = new T[len + 1];
if(pdata != NULL)
{
for(int i = 0 ; i < len ; i++)
{
data[i] = pdata[i];
}
delete[] pdata;
}
data[len] = d;
len++;
}
//测试代码
  int main(int argc, char* argv[])
{
MyArray<int>  a;
a.push(11);
a.push(22);
a.push(33);
a.push(55);
a[0]=44;
cout<<a[0]<<endl<<a[1]<<endl<<a[2]<<endl<<a[3]<<endl;
return 0;
}

问题:在类中建立一个int类型的数组   
方法一:(错误)   
class Test   
{   
const int size = 100;   
int array[size];   //……   
};   
错误原因:   
1:因为在一个类中,const恢复了它在c中的一部分意思,在每个类对象里分配存储并代表一个值,这个值一旦被初始化以后就不能被改变。所以在类中使用了const的意思是:在这个对象的生命周期内,它是一个常量。   
然而,每个对象可能包含不同的值。   
2:对const常量进行了初始化,C++中这个初始化必须由构造函数完成,如const常量在初始化列表中进行初始化。   
方法二:(正确,有缺陷)   
使用enum;   
class Test   
{   
enum { size = 100};   
int array[size];   //……   
};   
使用enum不会占用对象中的存储空间的,枚举常量在编译的时候被全部求值。   
缺点:   
假如定义一个非整型的常量该如何?enum无法完成此项操作,同时丧失了枚举本来的作用。   
方法三:(正确,最好)   
使用静态常量;   
class Test   
{   
static const int size;   int array[size];   //……   
};   
const int Test::size = 100;   
它既是常量,不能改变,又是静态,在类中只有一个定义点。所以能够完成任务。  
 同时,它可以定义任何与定义类型的常量。
posted on 2014-01-06 14:02 吴奇 阅读(402) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


软件之家 | 三次元