赋值类对象的值
Assigning values of class objects
main
#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 inputn");
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;
}
好吧,我一直在努力解决这个问题,但我不能。我不确定我做错了什么,但是当我尝试输入名称时,我不断收到写入冲突。我尝试查找答案,我看到的一些东西说尝试使用向量,但我还没有被教导如何使用它们。
更新
主.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 inputn");
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 个,所以它应该读
学生* p学生 = 新生[100];
您的学生班级也可以得到改善
应该创建一个构造函数,该构造函数接收学生姓名和 ID 并将它们设置为类变量。此外,您根本不应该在学生班级内讨论该数组。数组函数应在测试类级别或主级别处理。学生姓名和 ID 也应该在主函数或测试函数中询问。
此外,我从用户那里获取数据的更好方法如下所示:
cout << "Enter Students name-->";
getline(cin,studentName);
跟进您的其他问题:
好的,我可以告诉你的新人,你需要掌握一般的 opp。 所以简单地说,阅读你的书或变得更好,因为你完全迷失了!
为了帮助你一点点,你想这样做:主要创建一个学生类型的虚拟变量,我们称之为studentGenerator。从这里您有两种选择:
选项 1:要求用户输入名称和 ID 以分隔变量。然后使用这些变量来生成新的变量,以便学生生成器 = 新学生(姓名,ID)
选项2:在学生班级中设置新的突变器并使用 mutaros 设置数据:此选项有点废话,我会使用选项 1 代替!
所以现在你已经生成了这个新学生,把它放到你的 array.ie StundentArray[counter] = StudentGenerator。
现在这已经完成了 studentGenerator 是垃圾,因此您可以重用命令(在循环中)StudentGenerator = new Student(name,id) 来添加额外的学生。
你的设计有严重的缺陷。
学生类管理学生列表,它实际上只是"main()"中的一个数组?这毫无意义!
管理Student
集合(可以是数组)的StudentList
怎么样?
为了澄清您的理解,您认为这是在做什么?
Student* pStudents = new Student[0];
- 构造函数对象赋值是否泄漏内存
- C++ 指针赋值运算符重载(不仅是对象赋值,还有指针赋值)
- 将派生类对象赋值和访问到基类 "pointer to pointer" C++ 中的对象
- 如何禁止从其他类型向临时对象赋值和隐式强制转换
- c++为对象赋值重载数组索引运算符
- C++11 chrono:为time_point对象赋值
- 为带有大括号的非数组对象赋值合法吗
- 当我给有复制构造函数但没有赋值运算符的对象赋值时会发生什么
- c++从另一个对象赋值失败
- 如何将对象赋值给具有原始指针的矢量中的对象的属性
- When是c++中调用的复制构造函数,当我将一个对象赋值给另一个对象时,它不是被调用的吗?
- 为已删除的对象赋值
- c++中对类对象赋值
- 将c++函数对象赋值给c函数指针
- 将派生对象赋值给基类对象而不使用对象切片
- 无法为我的自定义类的对象赋值,该值的行为应类似于矩阵
- 在c++中将一个类对象赋值给另一个类对象
- 如何将类对象赋值给指针
- (c++)不能使用string::substr为对象赋值子字符串
- 将传递的对象赋值给构造函数中的成员对象