C++程序错误,对象数组使用

程序错误,如何改正,除了将类内成员改为公有答案之外??解答加分

#include <iostream>#include <string>
using namespace std;

class athlete{
public:
athlete(char *pname,char *pdept);
char * getname();
char * getdept();
private:
char *name;
char *dept;
};
//我把name和dept的类型改了,直接用申请动态内存并调用复制函数
//如果调用getname()和getdept()函数来返回name和dept
athlete::athlete(char *pname,char *pdept)
{
name=new char[strlen(pname)+1];
dept=new char[strlen(pdept)+1];
strcpy(name,pname);
strcpy(dept,pdept);
}
char * athlete::getname()
{
return name;
}
char * athlete::getdept()
{
return dept;
}
//但是返回的时候却说不能char*到int型,换成return *name,return *dept后不报错,运行出来不是定义的arr数组的参数,是随机数
//就是这个cout<<i+1<<"\t"<<arr[i].athlete::getname()<<' '<<arr[i].athlete::getdept()<<endl;
class game
{
public:
game(char *pname,int h,int m,int c,athlete *a);
void point();
public:
char *name;
int hour;
int minute;
int count;
athlete *arr;
};

game::game(char *pname,int h,int m,int c,athlete *a)
{
name=new char[strlen(pname)+1];
strcpy(name,pname);
hour=h;
minute=m;
count=c;
arr=a;
}

void game::point(){
int i;
cout<<"项目:"<<game::name<<"\t"<<"比赛时间:"<<game::hour<<"点"<<game::minute<<"分"<<endl;
cout<<"---------------------------------------------------------"<<endl;
for(i=0;i<game::count;i++)
cout<<i+1<<"\t"<<arr[i].name<<' '<<arr[i].dept<<endl;
//这里如果athlete类中name和dept不定义成public就不能调用,意思就是必须由定义的对象去调用name和dept哈???
//是不是????

}

int main(){
athlete *a;
athlete arr[3]={athlete("刘勇","商学院"),
athlete("周华","文学院"),
athlete("何川洋","法学院")};
a = arr;
game swimming("游泳",15,30,3,a);
swimming.point();
return 0;
}

按照你的代码,不调用private成员而是调用函数,编译没有报错
加了几个const之后,连warning都可以去掉
没发现你说的问题。
下面的我的代码。
当然,内存泄露是存在的,但我想这不是你遇到的问题,也就不改了
不说废话 上代码
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
class athlete
{
public:
athlete(const char *pname,const char *pdept);
char * getname();
char * getdept();
private:
char *name;
char *dept;
};

//我把name和dept的类型改了,直接用申请动态内存并调用复制函数
//如果调用getname()和getdept()函数来返回name和dept
athlete::athlete(const char *pname,const char *pdept)
{
name=new char[strlen(pname)+1];
dept=new char[strlen(pdept)+1];
strcpy(name,pname);
strcpy(dept,pdept);
}

char * athlete::getname()
{ return name;}
char * athlete::getdept()
{ return dept;}
//但是返回的时候却说不能char*到int型,换成return *name,return *dept后不报错,运行出来不是定义的arr数组的参数,是随机数
//就是这个cout<<i+1<<"\t"<<arr[i].athlete::getname()<<' '<<arr[i].athlete::getdept()<<endl;

//我试了一下 这个是可以的 看下面我的调用
class game
{
public:
game(const char *pname,int h,int m,int c,athlete *a);
void point();
public:
char *name;
int hour;
int minute;
int count;
athlete *arr;
};

game::game(const char *pname,int h,int m,int c,athlete *a)
{
name=new char[strlen(pname)+1];
strcpy(name,pname);
hour=h;
minute=m;
count=c;
arr=a;
}

void game::point()
{ int i;
cout<<"项目:"<<game::name<<"\t"<<"比赛时间:"<<game::hour<<"点"<<game::minute<<"分"<<endl;
cout<<"---------------------------------------------------------"<<endl;
for(i=0;i<game::count;i++)
cout<<i+1<<"\t"<<arr[i].getname()<<' '<<arr[i].getdept()<<endl;
//这里如果athlete类中name和dept不定义成public就不能调用,意思就是必须由定义的对象去调用name和dept哈???
//是不是????
//是这样的,不可以直接调用private成员
} int main()
{
athlete *a;
athlete arr[3]={athlete("刘勇","商学院"), athlete("周华","文学院"), athlete("何川洋","法学院")};
a = arr;
game swimming("游泳",15,30,3,a);
swimming.point();
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-28
别人不可以访问自己的私有变量的。想要获得这个变量的值,一般情况下,会定义一个对外的访问接口,getName(),或者其他一些方法。
第2个回答  2013-03-28
调用athlete的getdept和getname方法。另外,应该实现althlete类的复制构造函数和析构函数。
相似回答
大家正在搜