C++ 为什么分数是0? #包括 #包括 使用名称空间std; 班级学生{ 公众: const int code stud; int noGrades=0; int*grades=NULL; 学生(内部代码):代码螺柱(代码){ } 学生(整数代码,整数*成绩,整数分数):编码螺柱(代码){ 这->noGrades=noGrades; 此->等级=新整数[noGrades]; 对于(int i=0;i等级[i]=等级[i]; } 学生(const Student&existent):codeStud(existing.codeStud){ 此->noGrades=existence.noGrades; 此->等级=新整数[此->无等级]; 对于(inti=0;inoGrades;i++) 此->等级[i]=存在。等级[i]; } int getCode(){ 返回此->代码螺柱; } int getNoGrades(){ 返回此->noGrades; } 无效设置等级(int grades[],int noGrades){ 这->noGrades=noGrades; 此->等级=新整数[noGrades]; 对于(int i=0;i等级[i]=等级[i]; } }; void main(){ 学生s1(101); 我修改了你代码中的一些内容来编译它 #include<iostream> #include<string> using namespace std; class Student { public: const int codeStud; int noGrades = 0; int* grades = NULL; Student(int code) :codeStud(code) { } Student(int code, int* grades, int noGrades) :codeStud(code) { this->noGrades = noGrades; this->grades = new int[noGrades]; for (int i = 0; i < noGrades; i++) this->grades[i] = grades[i]; } Student(const Student&existent):codeStud(existent.codeStud) { this->noGrades = existent.noGrades; this->grades = new int[this->noGrades]; for (int i = 0; i < this->noGrades; i++) this->grades[i] = existent.grades[i]; } int getCode() { return this->codeStud; } int getNoGrades() { return this->noGrades; } void setGrades(int grades[],int noGrades) { this->noGrades = noGrades; this->grades = new int[noGrades]; for (int i = 0; i < noGrades; i++) this->grades[i] = grades[i]; } }; void main() { Student s1(101); cout<<s1.getNoGrades(); int grades[] = { 10,7,8,10,4 }; Student s2(104, grades, 5); cout << "\n" << s2.getNoGrades(); Student s3 = s2; cout << "\n" << s3.getCode(); int grades2[] = { 5,5,4,10 }; s1.setGrades(grades2,4); cout << "\n" << s1.getNoGrades(); // here is the problem }
什么是正确的,因为在第一次打印之前,您没有在代码的任何地方指定s1的等级数 此外,还应寻找:C++ 为什么分数是0? #包括 #包括 使用名称空间std; 班级学生{ 公众: const int code stud; int noGrades=0; int*grades=NULL; 学生(内部代码):代码螺柱(代码){ } 学生(整数代码,整数*成绩,整数分数):编码螺柱(代码){ 这->noGrades=noGrades; 此->等级=新整数[noGrades]; 对于(int i=0;i等级[i]=等级[i]; } 学生(const Student&existent):codeStud(existing.codeStud){ 此->noGrades=existence.noGrades; 此->等级=新整数[此->无等级]; 对于(inti=0;inoGrades;i++) 此->等级[i]=存在。等级[i]; } int getCode(){ 返回此->代码螺柱; } int getNoGrades(){ 返回此->noGrades; } 无效设置等级(int grades[],int noGrades){ 这->noGrades=noGrades; 此->等级=新整数[noGrades]; 对于(int i=0;i等级[i]=等级[i]; } }; void main(){ 学生s1(101); 我修改了你代码中的一些内容来编译它 #include<iostream> #include<string> using namespace std; class Student { public: const int codeStud; int noGrades = 0; int* grades = NULL; Student(int code) :codeStud(code) { } Student(int code, int* grades, int noGrades) :codeStud(code) { this->noGrades = noGrades; this->grades = new int[noGrades]; for (int i = 0; i < noGrades; i++) this->grades[i] = grades[i]; } Student(const Student&existent):codeStud(existent.codeStud) { this->noGrades = existent.noGrades; this->grades = new int[this->noGrades]; for (int i = 0; i < this->noGrades; i++) this->grades[i] = existent.grades[i]; } int getCode() { return this->codeStud; } int getNoGrades() { return this->noGrades; } void setGrades(int grades[],int noGrades) { this->noGrades = noGrades; this->grades = new int[noGrades]; for (int i = 0; i < noGrades; i++) this->grades[i] = grades[i]; } }; void main() { Student s1(101); cout<<s1.getNoGrades(); int grades[] = { 10,7,8,10,4 }; Student s2(104, grades, 5); cout << "\n" << s2.getNoGrades(); Student s3 = s2; cout << "\n" << s3.getCode(); int grades2[] = { 5,5,4,10 }; s1.setGrades(grades2,4); cout << "\n" << s1.getNoGrades(); // here is the problem },c++,visual-studio,oop,C++,Visual Studio,Oop,什么是正确的,因为在第一次打印之前,您没有在代码的任何地方指定s1的等级数 此外,还应寻找: https://stackoverflow.com/questions/204476/what-should-main-return-in-c-and-c 为什么void main()不正确在我更正了输入错误(codeStud-->codeStud)之后,您的代码为我生成了正确的结果。在此之前,我甚至无法编译它,所以我猜您的IDE只运行了最新的工作版本,可以成功编译(在某处查找错误消息)。这就是您得到错
https://stackoverflow.com/questions/204476/what-should-main-return-in-c-and-c
为什么void main()不正确在我更正了输入错误(
codeStud
-->codeStud
)之后,您的代码为我生成了正确的结果。在此之前,我甚至无法编译它,所以我猜您的IDE只运行了最新的工作版本,可以成功编译(在某处查找错误消息)。这就是您得到错误结果的原因,因为您的更改甚至不在该版本中
关于代码的几个注意事项:
- 在
函数中,检查setGrades
是否没有指向某个对象。例如,如果我调用grades
并且在调用Student(int-code,int*grades,int-noGrades)
之后,代码会泄漏内存,因为它丢失了setGrades
之前已分配Student(int-code,int*grades,int-noGrades)的数组
- 您应该使用而不是C样式的数组。它将使您的代码更干净,更不容易出错(参见我的示例)
- 您可以将getter函数设置为const(如我的示例中所示),这样就可以保证这些函数不会更改类中任何成员的值(如果更改了,则会出现编译错误)。除此之外,您还可以将成员变量设置为private
vector
s实现:
#包括//cout
#包含//向量
使用名称空间std;
班级学生
{
公众:
学生(const int代码)
:m_代码{code}
{
}
学生(常量整数代码、常量标准::向量和分数)
:m_code{code},
m_等级{等级}
{
}
//默认复制构造函数已足够,因为可以复制该类
//成员方面。
int getCode()常量{
返回m_码;
}
int getNoGrades()常量{
返回m_grades.size();
}
无效设置坡度(常量标准::矢量和坡度){
m_等级=等级;
}
私人:
const int m_码;
标准:向量m_等级;
};
int main()
{
学生s1(101);
奇怪。在我看来很好。在我的手机上实际运行它是如此困难。你是否正确读取了输出?除了一个小的打字错误(你有const int codeStud;
,但应该是const int codeStud;
-如其他地方所述),代码按预期运行。可能由于上面列出的打字错误,您没有运行当前代码。我用英语翻译了变量名称,我的代码没有这种类型的错误。它一直显示0而不是4:\。此外,我重新启动了电脑。很抱歉,我没有提到,但我不允许更改Studen对象的类型是的,我很抱歉给你添了麻烦。
#include<iostream>
#include<string>
using namespace std;
class Student {
public:
int codeStud;
int noGrades = 0;
int* grades = NULL;
Student(int code) {
codeStud = code;
}
Student(int code, int* grades, int noGrades) {
this->noGrades = noGrades;
this->grades = new int[noGrades];
for (int i = 0; i < noGrades; i++)
this->grades[i] = grades[i];
}
Student(const Student&existent){
this->noGrades = existent.noGrades;
this->grades = new int[this->noGrades];
for (int i = 0; i < this->noGrades; i++)
this->grades[i] = existent.grades[i];
}
int getCode() {
return this->codeStud;
}
int getNoGrades() {
return this->noGrades;
}
void setGrades(int grades[],int noGrades) {
this->noGrades = noGrades;
this->grades = new int[noGrades];
for (int i = 0; i < noGrades; i++)
this->grades[i] = grades[i];
}
};
int main() {
Student s1(101);
cout<<s1.getNoGrades();
int grades[] = { 10,7,8,10,4 };
Student s2(104, grades, 5);
cout << "\n" << s2.getNoGrades();
Student s3 = s2;
int grades2[] = { 5,5,4,10 };
s1.setGrades(grades2,4);
cout << "\n" << s1.getNoGrades(); // here is the problem
}
0
5
4