динамическое распределение памяти - PullRequest
0 голосов
/ 27 февраля 2009

как динамически выделить память для массива структур .... например:

class students
{
    struct stud
        {
           int r_no;
           char name[20];
         }*s; 
}

как динамически выделить память для * s ...

Ответы [ 4 ]

5 голосов
/ 27 февраля 2009

Прежде всего, это , а не способ сделать это, так как вы можете использовать, например, вектор Stud. С кодом, который у вас есть, это будет что-то вроде:

class students
{
public:
    struct stud ... *s;
    students() // ctor
    {
        s = new stud[100]; // say you have 100 students
        // from now on you can use s[0], s[1], etc. in the class
    }
};

Тем не менее, то, что вы должны использовать, это своего рода вектор или список STL:

class students
{
public:
    struct stud ... ;
    std::vector<stud> my_students;
    students() // ctor
    {
        stud aStudent = {0, "Student Name"};
        my_students.push_back(aStudent); // add a new student.
    }
};
2 голосов
/ 27 февраля 2009

Вы должны использовать стандартные компоненты, когда можете. Здесь вам могут помочь std :: string и std :: vector.

struct Student
{
    int r_no;
    std::string name;
};
typedef std::vector<Student> StudentList;

При таком подходе нет смысла задаваться вопросом, как динамически распределять память. Все позаботились!

РЕДАКТИРОВАТЬ:

Я просто напечатал StudentList, потому что для меня добавление к нему большей функциональности не было бы связано с вопросом. Очевидно, что последняя строка может быть заменена истинным определением класса:

class StudentList
{
    public:
        // Add your own functionalities here
    private:
    std::vector<Student> m_students;
};
2 голосов
/ 27 февраля 2009

Почему дополнительная обертка структуры в классе только с указателем?

В любом случае, в C вы бы сделали что-то вроде этого:

struct stud
{
  int r_no;
  char name[20];
} *s;

size_t num_students = 4711;

s = malloc(num_students * sizeof *s);

Тогда было бы благоразумно пройти и убедиться, что все эти индивидуальные структуры, конечно, инициализированы.

Если вы подразумеваете, что это C ++, вы должны написать конструкторы, которые позаботятся об этом, и использовать новый [] для выделения массива структур.

0 голосов
/ 27 февраля 2009
class students
{
public:
  students(size_t noOfStudents):m_noOfStudents(noOfStudents)
   {
     s = new stud[m_noOfStudents];
   }

   ~students()
   {
     delete s;
   }

private: 
   struct stud
        {
           int r_no;
           char name[20];
         }*s; 

   size_t m_noOfStudents;  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...