主要

#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;
    }
}


}

学生

#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;
}


好吧,我一直在试图找出答案,但我做不到。我不确定自己在做什么错,但是在尝试输入名称时却不断遇到写冲突。我尝试查找答案,看到一些东西说尝试使用向量,但尚未学会如何使用向量。

更新

main.cpp

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;
}

最佳答案

您将数组大小初始化为0。由于数组大小是静态的,因此无法执行此操作。您需要设置更大的数字,我建议至少100左右的东西,这样它应该显示为

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

也可以提高你的学生班级

应该创建一个接受学生姓名和ID的构造函数,并将其设置为类变量。同样,您不应该完全在学生班级内迷恋数组。数组函数应在测试类级别或在主类中进行处理。在主要功能或测试功能中也应要求学生姓名和身分证件。v

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

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


跟进您的其他问题:

好的,我现在可以告诉您的新手,您通常需要了解opp。简而言之,请阅读您的书或因为自己完全迷路而获得更好的进步!

为了帮助您一点,您想要这样做:在main中创建一个Student类型的虚拟var,将其称为StudentGenerator。在这里,您有两个选择:

选项1:要求用户输入名称和ID以分隔变量。然后使用这些迷幻剂生成新的变体
StudentGenerator =新学生(姓名,ID)

选项2:在学生班级中有一个新的mutator并使用mutaros来设置数据:此选项有点麻烦,我会改用选项1!

所以现在您已经生成了这个新学生并将其放入您的array.ie StundentArray [counter] = StudentGenerator。

现在已经完成了studentGenerator的工作,因此您可以重复使用命令(循环)StudentGenerator = new Student(name,id)来添加其他学生。

关于c++ - 分配类对象的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11928289/

10-11 18:31