我正在尝试使用C ++做一些事情,我是新手:)
我尝试了一种班级计划来获取学生详细信息并打印输出。
#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
运算符。
但是我不确定编写此解决方案的最佳方法是什么。
我们将不胜感激任何帮助。
谢谢!
答案 0 :(得分:1)
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;
}
要获取最小值和最大值,可以分别使用STL提供的min_element
和max_element
。