64,648
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <cstring>
#include <cstddef>
//#include <new>//既然你要重载,为什么还包含呢,去掉
const int maxnames=5;
class Names
{
char name[25];
static char Names::pool[];
static bool Names::inuse[maxnames];
public:
Names (char* s)
{ strncpy(name,s,sizeof(name));}
void* operator new(size_t) throw (std::bad_alloc);//标准的
void operator delete(void*)throw();
void display()
{std::cout <<name <<std::endl;}
};
char Names::pool[maxnames*sizeof(Names)];
bool Names::inuse[maxnames];
void* Names::operator new(size_t) throw(std::bad_alloc)
{
try
{
for(int p=0;p <maxnames;p++)
if(!inuse[p])
{
inuse[p]=true;
return pool+p*sizeof(Names);
}
}
catch(std::bad_alloc & ba)
{
std::cout<<ba.what()<<std::endl;
}
return NULL;
}
void Names::operator delete(void* p) throw(std::bad_alloc)
{
if(0!=p)
inuse[((char*)p-pool)/sizeof(Names)]=0;
}
int main()
{
Names* nm[maxnames];
int i;
for(i=0;i <maxnames;i++)
{
std::cout <<std::endl <<"Enter name # " <<i+1 <<":";
char name[25];
std::cin>>name;
nm[i]=new Names(name);
}
for(i=0;i <maxnames;i++)
{
nm[i]->display();
delete nm[i];
}
return 0;
}