读书人

怎么创建动态的类对象

发布时间: 2013-01-05 15:20:39 作者: rapoo

如何创建动态的类对象
想通过输入,来确定创建对象的个数, 但不知道怎样动态的创建对象(红字描述的那部分),请大侠指教下有什么好的方法或思路吗??谢谢

int main()
{
int num;
cout<<"input the num of the player:\n";
cin>>num;
Player *pt=new Player[num+1];
*pt("name");
}

类对象如下:
class Player
{
private:
char *name;
int scores;
int num;
bool pass;
int array[6];
int tmpscores;
public:
Player(char *str="new player");//缺少 复制构造函数,赋值操作符的重载
~Player();
void Getscore();//容器处理
int TotalScore();
bool IsPass();
void GetPass();
};
[解决办法]
可以通过输入来new出你想要的对象个数。
[解决办法]
1 默认构造函数里要考虑数组的初始化 这是第一点
2 以接受输入来确定new的对象的个数 要确保输入的为数字 且为大于0的int 当然最好也有一个上限 要有出错处理
3 析构函数要干掉指针
[解决办法]
cin>>num;
Player *pt=new Player[num+1];
*pt("name");
你的这三句代码中是创建了一系列的对象,而你的第三句仅仅是把第一个对象赋值了,其他的都还是没有赋值。
你可以用一个循环来为每一个对象赋值:
cin>>num;
Player *pt=new Player[num+1]; //这个地方不用num+1的。(可能我不知道哦你还有什么其他的用途吧),楼上有位说的很好,构造函数中要先开辟数组的空间并初始化。
而且以后用字符串的时候最好用STL中的string类,很方便的。假设把你的char *name改成string name;


for(int idx = 0; idx < num; idx++)
{
cin>>name;
cin>>scores;
cin>>num;
cin>>pass;
for(int i = 0; i < 6; i++) //这个地方的数组长度6,最好用一个常量来定义(用C的宏定义也可以,为了以后的修改方便)
{
cin>>array[i];
}
cin>>tmpscores;
}


最好的方法是重载这个类的输入输出函数,不知道你们有没有学到这个,如果学过的话尽量用重载,以后用的也挺多的,更方便。如果没学过,建议好好学下。



[解决办法]
int main()
{
int num;
cout<<"input the num of the player:\n";
cin>>num;
Player *pt=new Player*[num]; //数组, 或者你研究一下vector,直接用vector

for (int i=0; i<num; ++i) {
char name[1024];
cin >> name;
pt[i] = new Player(name);
}



//delete
for (int i=0; i<num; ++i)
delete pt[i];

delete [] pt;
}

读书人网 >C++

热点推荐