读书人

一个题 们 帮帮忙啊 偶是C++的初学

发布时间: 2012-02-23 22:01:34 作者: rapoo

一个弱弱的问题 大虾们 帮帮忙啊 偶是C++的菜鸟 !下面的程序 帮偶调下,万分感激。。。。。。DELETE函数 还没有写。。
#include <iostream>
#include <assert.h>
using namespace std;
const int p_length=100;
class CStudentManage;


class CStudent
{
firend CStudentManage;
CStudent(char lname[],char lsex[],int lnum,char*lp );
CStudent(const CStudent &oCStudent);
virtual~CStudent();
CStudent &operator=(const CStudent &oCStudent);

public:

char *m_lp;
char mm_name;
char mm_sex;
int mm_num;
};



class CStudentManage
{
public:
CStudentManage(int iN=p_length);
CStudentManage(const CStudentManage &CStudentManage);
virtual~CStudentManage(void);

bool insert(const CStudent &oCStudent);
bool del(void);
CStudentManage & operator=(const CStudentManage &oCStudentManage);

void *operator new(size_t size);
void operator delete(void*p);
private:
CStudent*m_pCStudent[p_length];
int m_alength;
int m_actop;
};


CStudent::CStudent(char lname[],char lsex[],int lnum,char*lp)
{
m_lp=new char[strlen(lp)+1];
if(m_lp==null)
{
cout<<"内存分配失败"<<endl;
exit(0);
}
strcpy(mm_name[],lname[]);
strcpy(mn_sex[],lsex[]);
mm_num=lnum;
}

CStudent::CStudent(const CStudent &oCStudent)
{
m_lp=new char[strlen(oCStudent.m_lp)+1];
if(m_lp==NULL)
{
cout<<"内存分配失败"<<endl;
exit(0);
}
strcpy(m_lp,oCStudent.m_lp);
strcpy(mm_name[],oCStudent.lname[]);
strcpy(mn_sex[],oCStudent.lsex[]);
mm_num=oCStudent.lnum;
}

CStudent::~CStudent()
{
delete m_lp;
}

CStudent & CStudent::operator=(const CStudent &oCStudent)
{
if(this==&oCStudent)
{
return *this;
}
delete m_lp;
m_lp=new char[strlen(oCStudent.m_lp)+1];
if(m_lp==NULL)
{
cout<<"内存分配失败"<<endl;
exit(0);
}
strcpy(m_lp,oCStudent.m_lp);
strcpy(mm_name[],oCStudent.lname[]);
strcpy(mn_sex[],oCStudent.lsex[]);
mm_num=oCStudent.lnum;
return *this;
}


CStudentManage::CStudentManage(int iN)
{
for (int i=0;i<iN;i++)
{
m_pCStudent[i]==NULL;
}
m_alength=iN;
m_actop=0;
}


CStudentManage::CStudentManage(const CStudentManage &CStudentManage)
{
for(int i=0; i<CStudentManage.m_actop;i++)
{
m_pCStudent[i]=new CStudent(oCStudentManage.m_pCStudent[i]->m_lp,oCStudentManage.m_pCStudent[i]->mm_name,
oCStudentManage.m_pCStudent[i]->mm_sex,oCStudentManage.m_pCStudent[i]->mm_num);
if (m_pCStudent[i]==null)
{
cout<<"内存分配失败"<<endl;
exit(0);
}
}
for(i=CStudentManage.m_actop;i<CStudentManage.m_alength;i++)
{
m_pCStudent[i]=null;
}

m_alength=CStudentManage.m_alength;

m_actop=CStudentManage.m_actop;
}





CStudentManage::~CStudentManage(void)
{
for(int i=0;i<m_actop;i++)
{
delete m_pCStudent[i];
}
}



bool CStudentManage::insert(const CStudent &oCStudent)
{
if(m_actop>=m_alength)
{
count<<"对不起,已经超过数组长度,不可插入"<<endl;
return false;
}

m_pCStudent[m_actop]=new CStudentManage(CStudent.m_pCStudent[i]->m_lp,CStudent.m_pCStudent[i]->mm_name,
CStudent.m_pCStudent[i]->mm_sex,CStudent.m_pCStudent[i]->mm_num);
if(m_pCStudent[m_actop]==null)
{
cout<<"节点创建失败"<<endl;
exit(0);
}
m_actop++;
cout<<"您已经插入了一个节点"<<endl;
return ture;
}


bool CStudentManage::del(void)
{
if(!IsEmpty())
{
m_actop--;
cout<<"你删除的节点名字为"<<m_pCStudent[m_actop]->m_lp<<endl;
delete m_pCStudent[m_actop];
return ture;
}
else
{
cout<<"节点数组为空,您不能删除"<<endl;
return false;
}
}

CStudentManage & CStudentManage::operator=(const CStudentManage &oCStudentManage)
{
if(this==&oCStudentManage)
{
return *this;
}
if (m_alength!=oCStudentManage.m_alength)
{
cout<<"数组的长度不等,不能复制"<<endl;
return *this;
}
for (int=0;i<m_actop;i++)
{
m_pCStudent[i]=new CStudent(oCStudentManage.m_pCStudent[i]->m_lp,oCStudentManage.m_pCStudent[i]->mm_name,
oCStudentManage.m_pCStudent[i]->mm_sex,oCStudentManage.m_pCStudent[i]->mm_num);
if (m_pCStudent[i]==null)
{
cout<<"内存分配失败"<<endl;
exit(0);
}
}
for(i=CStudentManage.m_actop;i<CStudentManage.m_alength;i++)
{
m_pCStudent[i]=null;
}

m_alength=CStudentManage.m_alength;

m_actop=CStudentManage.m_actop;
return *this;
}


void *CStudentManage::operator new(size_t size)
{
cout<<"自定义的 CStudentManage new"<<endl;
return malloc(size);
}


void CStudentManage::operator delete(void*p)
{
cout<<"自定义的 CStudentManage delete"<<endl;
free(p);
}



void main(void)
{
CStudent student1("夏福川","男",30);
CStudent student2("郎俊","男",31);
CStudent student3("邓鑫洋","男",32);
CStudent student4("韩飞","男",33);
CStudent student5("杨孟禹","男",34);
CStudent student6("章雅娟","女",35);
CStudent student7("董敏","女",36);
CStudent student8("祈雪仪","女",37);
CStudent student9("王媛","女",38);
CStudent student10("许发玲","女",39);


CStudentManage oCStudentManage1;


oCStudentManage1.insert(student1);
oCStudentManage1.insert(student2);
oCStudentManage1.insert(student3);、
oCStudentManage1.insert(student4);
oCStudentManage1.insert(student5);
oCStudentManage1.insert(student6);
oCStudentManage1.insert(student7);


oCStudentManage1.insert(student8);
oCStudentManage1.insert(student9);
oCStudentManage1.insert(student10);







[解决办法]
太猛了,只看了下语法错误就崩溃了。。

C/C++ code
 
#include <iostream>
#include <assert.h>
using namespace std;
const int p_length=100;
class CStudentManage;


class CStudent
{
public: // 16. 构造函数需要公开, main 中调用了
friend CStudentManage; // 1. firend 拼写错误
CStudent(const char lname[],const char lsex[],int lnum, const char*lp = NULL ); // 10. 要用 const 就用完整 15. 后面有只用 3 个参数的版本
CStudent(const CStudent &oCStudent);
virtual~CStudent();
CStudent &operator=(const CStudent &oCStudent);

public:

char *m_lp;
char mm_name[100]; // 3. 应该用字符串
char mn_sex[100]; // 4. 下面都用的 mn_sex
int mm_num;
};


class CStudentManage
{
public:
CStudentManage(int iN=p_length);
CStudentManage(const CStudentManage &CStudentManage);
virtual~CStudentManage(void);

bool insert(const CStudent &oCStudent);
bool del(void);
CStudentManage & operator=(const CStudentManage &oCStudentManage);

void *operator new(size_t size);
void operator delete(void*p);
private:
CStudent*m_pCStudent[p_length];
int m_alength;
int m_actop;
};


CStudent::CStudent(const char lname[],const char lsex[],int lnum, const char*lp)
{
m_lp=new char[strlen(lp)+1];
if(m_lp==NULL) // 2. 没有定义 null, 注意大小写
{
cout < <"内存分配失败" < <endl;
exit(0);
}
strcpy(mm_name,lname); // 5. 语法呀! strcpy 接受指针参数,再说也没 mm_name[] 这种写法
strcpy(mn_sex,lsex); // 5.
mm_num=lnum;
}

CStudent::CStudent(const CStudent &oCStudent)
{
m_lp=new char[strlen(oCStudent.m_lp)+1];
if(m_lp==NULL)
{
cout < <"内存分配失败" < <endl;
exit(0);
}
strcpy(m_lp,oCStudent.m_lp);
strcpy(mm_name,oCStudent.mm_name); // 5
strcpy(mn_sex,oCStudent.mn_sex); // 5
mm_num=oCStudent.mm_num;
}

CStudent::~CStudent()
{
delete m_lp;
}

CStudent & CStudent::operator=(const CStudent &oCStudent)
{
if(this==&oCStudent)
{
return *this;
}
delete m_lp;
m_lp=new char[strlen(oCStudent.m_lp)+1];
if(m_lp==NULL)
{
cout < <"内存分配失败" < <endl;
exit(0);
}
strcpy(m_lp,oCStudent.m_lp);
strcpy(mm_name,oCStudent.mm_name); // 5
strcpy(mn_sex,oCStudent.mn_sex); // 5
mm_num=oCStudent.mm_num; // 5
return *this;
}


CStudentManage::CStudentManage(int iN)
{
for (int i=0;i <iN;i++)
{
m_pCStudent[i]=NULL; // 6. == 是比较,不是赋值
}
m_alength=iN;
m_actop=0;
}


CStudentManage::CStudentManage(const CStudentManage &oCStudentManage) // 7. 汗
{


for(int i=0; i <oCStudentManage.m_actop;i++)
{
m_pCStudent[i]=new CStudent(oCStudentManage.m_pCStudent[i]->mm_name, oCStudentManage.m_pCStudent[i]->mn_sex,
oCStudentManage.m_pCStudent[i]->mm_num, oCStudentManage.m_pCStudent[i]->m_lp); // 8. 注意参数顺序
if (m_pCStudent[i]==NULL) // 2
{
cout < <"内存分配失败" < <endl;
exit(0);
}
}
for(i=oCStudentManage.m_actop;i <oCStudentManage.m_alength;i++)
{
m_pCStudent[i]=NULL; // 2
}

m_alength=oCStudentManage.m_alength;

m_actop=oCStudentManage.m_actop;
}


CStudentManage::~CStudentManage(void)
{
for(int i=0;i <m_actop;i++)
{
delete m_pCStudent[i];
}
}


bool CStudentManage::insert(const CStudent &oCStudent)
{
if(m_actop>=m_alength)
{
cout < <"对不起,已经超过数组长度,不可插入" < <endl; // 9. cout 也会拼错
return false;
}

m_pCStudent[m_actop]=new CStudent(oCStudent.mm_name,
oCStudent.mn_sex,oCStudent.mm_num, oCStudent.m_lp); // 8
if(m_pCStudent[m_actop]==NULL) // 2
{
cout < <"节点创建失败" < <endl;
exit(0);
}
m_actop++;
cout < <"您已经插入了一个节点" < <endl;
return true; // 11. true 又被你拼错了
}


bool CStudentManage::del(void)
{
if(!m_actop != 0) // 12. IsEmpty 没定义
{
m_actop--;
cout < <"你删除的节点名字为" < <m_pCStudent[m_actop]->m_lp < <endl;
delete m_pCStudent[m_actop];
return true; // 11.
}
else
{
cout < <"节点数组为空,您不能删除" < <endl;
return false;
}
}

CStudentManage & CStudentManage::operator=(const CStudentManage &oCStudentManage)
{
if(this==&oCStudentManage)
{
return *this;
}
if (m_alength!=oCStudentManage.m_alength)
{
cout < <"数组的长度不等,不能复制" < <endl;
return *this;
}
for (int i=0;i <m_actop;i++) // 13. 变量都没定义
{
m_pCStudent[i]=new CStudent(oCStudentManage.m_pCStudent[i]->mm_name,
oCStudentManage.m_pCStudent[i]->mn_sex,oCStudentManage.m_pCStudent[i]->mm_num, oCStudentManage.m_pCStudent[i]->m_lp);
if (m_pCStudent[i]==NULL) // 2
{
cout < <"内存分配失败" < <endl;
exit(0);
}
}
for(i=oCStudentManage.m_actop;i <oCStudentManage.m_alength;i++)
{
m_pCStudent[i]=NULL; // 2
}

m_alength=oCStudentManage.m_alength;

m_actop=oCStudentManage.m_actop;
return *this;
}


void *CStudentManage::operator new(size_t size)
{
cout < <"自定义的 CStudentManage new" < <endl;
return malloc(size);
}


void CStudentManage::operator delete(void*p)
{
cout < <"自定义的 CStudentManage delete" < <endl;


free(p);
}


void main(void)
{
CStudent student1("夏福川","男",30); // 14. 分号打成中文了
CStudent student2("郎俊","男",31);
CStudent student3("邓鑫洋","男",32);
CStudent student4("韩飞","男",33);
CStudent student5("杨孟禹","男",34);
CStudent student6("章雅娟","女",35);
CStudent student7("董敏","女",36);
CStudent student8("祈雪仪","女",37);
CStudent student9("王媛","女",38);
CStudent student10("许发玲","女",39);


CStudentManage oCStudentManage1;


oCStudentManage1.insert(student1);
oCStudentManage1.insert(student2);
oCStudentManage1.insert(student3); // 17. 、 是什么玩意儿?
oCStudentManage1.insert(student4);
oCStudentManage1.insert(student5);
oCStudentManage1.insert(student6);
oCStudentManage1.insert(student7);
oCStudentManage1.insert(student8);
oCStudentManage1.insert(student9);
oCStudentManage1.insert(student10);
}

读书人网 >C++

热点推荐