我有一个班级学生
字符串姓氏; unsigned int number_of_gradebook; 静态整数大小; unsigned int * p =新的unsigned int [大小];
但是似乎没有输出一系列成绩。
我的代码:
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
class Student {
private:
string surname;
unsigned int number_of_gradebook;
static int size;
unsigned int *p = new unsigned int[size];
public:
Student(string s, unsigned int n, static int size, unsigned int *q):surname(s) {
number_of_gradebook = n;
//unsigned int *p = new unsigned int[size];
for (int i = 0; i++; i < size) {
p[i]=q[i];
}
}
Student() {}
~Student() { delete[]p; }
//friend std::ostream& operator<<(std::ostream&, const Student);
string GetSurname() const { return surname; }
unsigned int GetNumOfGrdb() const { return number_of_gradebook; }
unsigned int GetMarks() const { return *p; }
void Print_Student();
};
int Student::size=0;
void Student :: Print_Student() {
cout << "Student: " << surname << "\t" << number_of_gradebook << endl;
if (size) {
for (int i = 0; i++; i < size) {
cout << p[i] << "\t";
}
}
}
class Group {
Student *s;
int count;
public:
Group(int n=0) {
s = new Student[count = n];
}
~Group() { delete[]s; }
friend void AddStudent();
friend void DeleteStudent();
friend void FindAveragePoint();
friend void PrintFiveBest();
void output() {
cout << s << endl;
}
};
int main() {
Student A("Ivanov", 45368400, 5, new unsigned int[5] {3,4,4,5,3});
A.Print_Student();
cout << A.GetMarks();
system("pause");
}
有什么建议吗?
答案 0 :(得分:1)
假设这是一些工作,并且您不允许使用STL。如果允许您使用STL,则放弃所有的手动内存管理,而使用std::vector。如果没有,请继续阅读。
成员size
始终为0。size
的设计存在问题。如果它是静态的(对于Student
的所有实例都是静态的),那么为什么构造函数中没有执行任何操作的参数size
?我认为size
应该是普通成员,而不是静态成员。
Student(string s, unsigned int n, int size, unsigned int *q) :
surname(s),
number_of_gradebook(n),
size(size),
p(new unsigned int[size])
{
...
}
for (int i = 0; i++; i < size)
for (int i = 0; i < size; i++)
请注意,您会在代码中进一步重复此错误。
这行代码:s = new Student[count = n];
可能有用,但是却行不通,您可能认为行得通,很难阅读,应该在初始化列表中分成两行,甚至更好:
Group(int n) :
count(n),
s(new Student[count])
{...}
请记住,new X[0]
无效。因此,最好删除默认值或使用非0的值! 甚至更好:使用向量。
答案 1 :(得分:1)
我修改了您的一些代码。但是让我告诉你你的错误。
class Student {
private:
string surname;
int number_of_gradebook;
int size;
int *p;
public:
Student(string s,int n,int siz, int *q):surname(s) {
size = siz;
number_of_gradebook = n;
p = new int[siz];
for (int i = 0; i < size;i++) {
p[i]= q[i];
}
}
Student() {}
void GetMarks() const {
for(int i=0;i<size;++i)
{
cout<<p[i]<<endl;
}
}
void Print_Student();
};
void Student :: Print_Student() {
cout << "Student: " << surname << "\t" << number_of_gradebook << endl;
for(int i=0;i<size;++i)
{
cout<<p[i]<<endl;
}
}
int main() {
int arr[] = {1,2,3,4,5};
Student A("Ivanov", 69, 5, arr);
A.Print_Student();
A.GetMarks();
system("pause");
}