C ++将新的类对象添加到数组中的新位置

时间:2013-06-09 12:29:26

标签: c++ arrays class visual-c++

我是c ++编程的新手,以前有关AS3编程的知识。 我的问题是我无法弄清楚如何将类中的新对象插入到数组中。

基本上我要做的是:

ClassName classArray[];
classArray[n]=new ClassName("Tekst");

这是我的代码(使用visual studio 2012 C ++编写):

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

//a class holding user data
class User
{
public:
    string name;
    User(string nameInn)
    {
        //when the user is created it should get information about its name.
        name=nameInn;
    }
};

//array with all users
User userArr[];
int userArrLength=0; //the length of that array (dont know how to find the length of arays holding classes)

int main()
{
    //the user writes down the name of all users.
    cout << "Write user name. \n Write \"fin\" til finish\n";
    bool hasFinished=false;
    //asks you for a new user until you write fin
    while(hasFinished==false)
    {
        string inn;
        cin >> inn;
        if(inn=="fin") hasFinished=true;
        //here im trying to make a new user inn a new spot in the userArr.
        else userArr[(userArrLength+=1)+1]=new User(inn);
    }

    return 0;
}

我的格式是否错误,如果是这样我如何格式化?或者我误解了C ++中的类必不可少的东西?

4 个答案:

答案 0 :(得分:2)

std::vector是一个实现动态大小的数组的数据结构,可以根据需要增加大小。您可以使用std::vector<User>代替自己的数组:

#include <vector>

...

  std::vector<User> v;

  // perhaps in a loop
  string inn;
  cin >> inn;
  v.push_back(User(inn));

答案 1 :(得分:1)

创建数组后,无法更改数组的长度。

答案 2 :(得分:1)

在C ++中,数组的大小是静态的。此外,new会创建一个指针,这意味着您还要为数组使用错误的数据类型。

建议的解决方法是使用向量,而不是:

// At the top
#include <vector>

// Instead of that array
std::vector<User> userVector;

// Inside of the loop
userVector.push_back(User(inn));

std::vector本质上是一个动态数组。

但仍有一些事情要考虑:为向量分配空间时,所有成员都使用默认构造函数初始化(即可以不带参数调用的成员)。

如果您的User类没有默认构造函数如果您的cl,则必须将指针插入用户(std::vector<User * > userVectoruserVector.push_back(new User(inn)))相反,然后手动删除delete之后的指针。(见下面的评论)

答案 3 :(得分:0)

如果您不知道数组的大小,那么您不应该使用静态数组。您应该使用动态数组。像这样:

#include <vector>

std::vector<User> userArr;

此处userArr将是具有动态大小的向量。然后你可以改变你的while循环来代替:

std::vector<User> arr;

for (std::string in; std::cin >> in && in != "fin";)
{
    arr.push_back( User(in) );
}