Как создать и добавить новый объект в существующий массив, используя динамическое выделение памяти - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь сделать что-то с C ++, и я новичок в этом:)

Я испробовал 1 программу класса, в которой содержатся сведения об ученике и распечатывается его вывод.

#include <iostream>
using namespace std;

#define MAX 10

class student
{
    private:
        char  name[30];
        int   rollNo;
        int   total;
        float perc;
    public:
        //member function to get student's details
        void getDetails(void);
        //member function to print student's details
        void putDetails(void);
};

//member function definition, outside of the class
void student::getDetails(void){
    cout << "Enter name: " ;
    cin >> name;
    cout << "Enter roll number: ";
    cin >> rollNo;
    cout << "Enter total marks outof 500: ";
    cin >> total;
    perc=(float)total/500*100;
}

//member function definition, outside of the class
void student::putDetails(void) {
    cout << "Student details:\n";
    cout << "Name:"<< name << ",Roll Number:" << rollNo << ",Total:" << total << ",Percentage:" << perc;
}

int main()
{
    student std[MAX];       //array of objects creation
    int n,loop;

    cout << "Enter total number of students: ";
    cin >> n;

    for(loop=0;loop< n; loop++){
        cout << "Enter details of student " << loop+1 << ":\n";
        std[loop].getDetails();
    }

    cout << endl;

    for(loop=0;loop< n; loop++) {
        cout << "Details of student " << (loop+1) << ":\n";
        std[loop].putDetails();
    }

    return 0;
}

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

Теперь я хочу добавить новый объект Student во время выполнения, используя динамическое выделение памяти, и хочу добавить этот объект в существующий массив объектов (чтобы я мог получить самые высокие и самые низкие оценки любого студента)

Я знаю, что для этого нужно использовать оператор new.

Но я не уверен, что может быть лучшим способом написать это решение.

Любая помощь будет высоко оценена.

Спасибо!

1 Ответ

0 голосов
/ 20 января 2019

IMO, лучший способ сделать это с использованием динамической памяти - использовать std::unique_ptr или std::shared_ptr (на самом деле это зависит от требований).

Вот один пример использования unique_ptr:

using StudentPtr = std::unique_ptr<student>;

int main() {
    std::vector<StudentPtr> studentDetails;
    int n;

    cout << "Enter the number of students: ";
    cin >> n;

    studentDetails.resize(n);

    for (auto &s: studentDetails) {
        s = StudentPtr(new student);
        s->getDetails();
    }

    return 0;
}

Для получения минимума и максимума вы можете использовать min_element и max_element, предоставленные STL соответственно.

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