gpt4 book ai didi

c++ - 将对象数组传递给同一类 C++

转载 作者:行者123 更新时间:2023-11-28 04:57:02 26 4
gpt4 key购买 nike

问题:声明一个名为“StudentRec”的类,其中包含三个私有(private)成员:int 类型的“enrolNo”、float 类型的“CGPA”和字符串类型的“branch”。声明一个名为“Student”的对象数组,大小为 5,属于“StudentRec”类。编写公共(public)成员函数:(i) void sort (StudentRec Student[], int N ) 以相对于“CGPA”的升序对数据进行排序和 (ii) void print (StudentRec Student[], int N ) 以显示排序和未排序的学生记录。编写main来测试这些成员函数。

疑问 : 排序部分我后面会做。我怀疑下面的代码(倒数第二行) Student[5].print(Student, N ); 是否是调用函数 print 的正确方法?还可以通过对象数组调用此函数吗 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 ); 调用未定义的行为,因为没有 Student[5]。但是,您的 print 实现实际上并没有使用调用它的对象,所以这可能就是它在实践中起作用的原因。

为了让您的程序在尽可能接近赋值的情况下进行合理的设计,您可以将函数声明为static:

static void print(StudentRec Student[], int N );

这意味着,虽然函数是在类内部声明的,并且可以访问类对象的私有(private)成员,但它们不依赖于要调用的任何具体对象。然后您可以像这样使用它们:

StudentRec::print(Student, N);

附带说明一下,您的 print 实现实际上并未使用参数 N

关于c++ - 将对象数组传递给同一类 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46928216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com