【发布时间】:2018-04-06 07:05:09
【问题描述】:
问题:声明一个名为“StudentRec”的类,它具有三个私有成员:int 类型的“enrolNo”、float 类型的“CGPA”和字符串类型的“branch”。声明一个名为“Student”的对象数组,其大小为 5,属于“StudentRec”类。编写公共成员函数:(i) void sort (StudentRec Student[], int N) 以相对于 'CGPA' 升序对数据进行排序; (ii) void print (StudentRec Student[], int N) 以显示已排序和未排序的学生记录。编写 main 来测试这些成员函数。
疑问 :我稍后会做的排序部分。我的疑问是,在下面的代码(倒数第二行)Student[5].print(Student, N ); 中是否是调用函数打印的正确方法?否则如何通过对象数组调用此函数Student[0].print(Student, N ) 也提供正确的输出。为什么 ?
#include<iostream>
#include<cstring>
using namespace std;
class StudentRec
{
private:
int enrolNo;
float CGPA;
string branch;
public:
void assign()
{
cin>>enrolNo>>CGPA>>branch;
}
void sort (StudentRec Student[], int N );
void print(StudentRec Student[], int N )
{
int i;
for(i=0; i<5; i++)
{
cout<<"Student"<<" "<<i<<" " ;
cout<<Student[i].enrolNo<<" "<<Student[i].CGPA<<" "<<Student[i].branch<<endl;
}
}
};
int main()
{
StudentRec Student[5];
int i,N=5;
for(i=0; i<5; i++)
Student[i].assign();
Student[5].print(Student, N );
return 0;
}
【问题讨论】:
-
Student[5].print(Student, N );调用 undefined behavior 因为您的数组只有 5 的大小(意味着最后一个有效索引是 4) -
那里是没有
Student[5]。您的课程是否解释了基本数组索引的工作原理? -
换个说法 - 为什么
sort和print不是static成员函数?他们不依赖实例 -
Student[0].print ...但是你的老师对编程和C++一无所知- -
是的。更好的选择是考虑您被告知的有关正确 C++ 实践的内容,以及如何更改设计以使用它们。但如果你这样做了,你将不得不希望你的老师不会因为没有遵循他们糟糕的设计而对你进行评分……这最终意味着你在编码方面比他们更好。