0

主要的

#include <stdio.h>
#include "Student.h"
#include <stdlib.h>



void main()
{
Student* pStudents = new Student[0];
int arraySize = 0;

int input = 0;

while(input != 3)
{
    printf("Press 1 to add student, 2 to print and 3 to quit.\n");
    scanf_s("%d", &input);
    switch(input)
    {
    case 1:
        pStudents[numOfStudents].AddStudent(pStudents, arraySize);
        arraySize++;
        numOfStudents++;
        break;
    case 2:
        break;
    case 3:
        break;
    default:
        printf("Invalid input\n");
        break;
    }
}

}

学生.h

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

class Student
{
public:
    Student(void);
    ~Student(void);
     void AddStudent(Student* pStudent, int arraySize);
private:
    string name;
    int ID;
};

学生.cpp

#include "Student.h"

Student::Student(void)
    : name("N/A")
    , ID(0)
{

}

Student::~Student(void)
{
}
void Student::AddStudent(Student* pStudent, int arraySize)
{
if(arraySize == 0)
{
    delete[] pStudent;
    pStudent = NULL;
    pStudent = new Student[1];

}
else
{
    Student* temp = new Student[(arraySize+1)];
    for(int i = 0; i < arraySize; ++i)
    {
        temp[i] = pStudent[i];
    }
    delete[] pStudent;
    pStudent = temp;
}
printf("Enter name of student.\n");
cin >> name;
printf("Enter ID of student. \n");
cin >> ID;
}

好吧,我一直试图弄清楚这一点,但我做不到。我不确定自己做错了什么,但是当我尝试输入名称时,我不断收到写入违规。我试着查找答案,我看到的一些东西尝试使用向量,但我还没有被教导如何使用它们。

更新

主文件

void main()
{
Student* pStudents = new Student[100];
Student studentGenerator;
int numOfStudents = 0;
string name;
int ID;


int input = 0;

while(input != 3)
{
    printf("Press 1 to add student, 2 to print and 3 to quit.\n");
    scanf_s("%d", &input);
    switch(input)
    {
    case 1:
        printf("Enter name of student.\n");
        cin >> name;
        printf("Enter ID of student. \n");
        cin >> ID;
        studentGenerator = Student(name, ID);
        pStudents[numOfStudents] = studentGenerator;
        numOfStudents++;
        break;
    case 2:
        for(int i = 0; i < numOfStudents; ++i)
        {
            studentGenerator.PrintStudents(pStudents[i]);
        }
        break;
    case 3:
        break;
    default:
        printf("Invalid input\n");
        break;
    }
}

}

学生.cpp

#include "Student.h"

Student::Student(void)
: name("N/A")
, ID(0)
{

}

Student::~Student(void)
{
}
Student::Student(string studentName, int studentID)
{   
name = studentName;
ID = studentID;
}
void Student::PrintStudents(Student student)
{
cout << "Name: " <<  name << endl;
cout << "ID: " << ID << endl;
}
4

2 回答 2

1

你的设计存在严重缺陷。

Student 类管理 Student 列表,它实际上只是 "main()" 中的一个数组?这是没有意义的!

如何StudentList管理一个集合(可以是一个数组)Student

为了澄清您的理解,您认为这是在做什么?:

Student* pStudents = new Student[0];

于 2012-08-13T04:49:51.377 回答
1

您将数组大小初始化为 0。您不能这样做,因为数组大小是静态的。你需要设置一个更大的数字我建议至少 100 这样它应该读

学生* pStudents = 新学生[100];

您的学生班级也可以改善

应该创建一个构造函数,该构造函数接受学生姓名和 id 并将它们设置为类变量。此外,您根本不应该关心学生班级内的数组。数组函数应该在测试类级别或 main.js 中处理。学生姓名和 id 也应该在主要或测试功能中询问。v

另外,我从用户那里获取数据的更好方法如下所示:

cout << "Enter Students name-->";
getline(cin,studentName);

跟进您的其他问题:

好的,我可以告诉你的新人,你需要掌握 opp。因此,简单地说,阅读您的书或获得更好的知识,因为您完全迷失了!

为了帮助你一点点,你想这样做:在main中创建一个Student类型的虚拟变量,我们称之为studentGenerator。从这里你有两个选择:

选项 1:要求用户输入名称和 ID 以分隔变量。然后使用这些变量生成新变量,这样 StudentGenerator = new Student(name,id)

选项 2:在学生班级中有新的 mutator 并使用 mutaros 设置数据:这个选项有点糟糕,我会改用选项 1!

所以现在你已经生成了这个新学生,把它放到你的数组中。即 StundentArray[counter] = StudentGenerator。

现在这完成了 studentGenerator 是垃圾,因此您可以重用命令(在循环中) StudentGenerator = new Student(name,id) 来添加额外的学生。

于 2012-08-13T04:59:36.430 回答