gpt4 book ai didi

c++ - 关于类和对象的初学者问题

转载 作者:行者123 更新时间:2023-12-01 14:25:40 25 4
gpt4 key购买 nike

我正在为学校开发一个小程序,介绍如何使用对象。我刚上课,但仍在努力解决这个问题。我并不是真的在问如何修复我的代码,我只是想更好地了解事情。

在下面的代码中,在我的实现文件student.cpp 中,有一个名为isLessThanByID 的函数。它应该将当前对象与传入的对象进行比较。我很难理解“当前”对象是什么以及函数如何知道当前对象是什么。有两个对象 s1 和 s2。我的导师说假设 s1 是当前对象,s2 是传入的对象。我问我的导师如果函数没有传入,函数如何知道 s1,她说这是因为 s1 是类的对象而函数是类成员。这在一分钟内是有道理的,然后我仔细考虑了一下,意识到我仍然很困惑。如果s1不需要传入,那为什么还要传入s2呢?

我在那个函数上遇到错误

"error: extra qualification ‘Student::’ on member ‘isLessThanByID’ [-fpermissive] bool Student::isLessThanByID(const Student &s2) const;".

我不确定“额外资格”是什么意思。

我非常感谢任何帮助我解决这个问题的人!谢谢!

这是我的代码:

应用.cpp


const double minGpaForHonor = 3.75;

int main()
{
Student s1("G10", 3.9);
Student s2("G20", 3.5);


s1.print();
s2.print();

//write code to test Student::isLessThanByID
s1.isLessThanByID(s2);

if (true)
cout << "s2 is less than s1" << endl;

else
cout << "s1 is less than s2" << endl;

//write code to test Student::qualifyForHonor
s1.qualifyForHonor(minGpaForHonor);
if (true)
cout << "s1 qualifies for honors" << endl;

s2.qualifyForHonor(minGpaForHonor);
if (true)
cout << "s2 qualifies for honors" << endl;

return 0;
}

student.cpp - 实现文件


//implement the required 3 functions here

Student::Student(const char initId[], double gpa)
{
//initialize ID
for (int i = 0; i < strlen(initId); i++)
{
id[i] = initId[i];
}

gpa = gpa;
//initialize gpa
}

bool Student::isLessThanByID(const Student &s2) const
{
//compare current student object to passed in object}
if (strcmp(s1.id, s2.id) < 0)
return true;

else
return false;

}

bool Student::qualifyForHonor(double minGpaForHonor) const
{
//return true if gpa is higher than "minGpaForHonor"
if(gpa >= minGpaForHonor)
return true;
}
void Student::print() const
{
cout << id << '\t' << gpa << endl;
}

student.h-头文件

#define STUDENT_H

#include <iostream>
#include <cstring>

using namespace std;

class Student
{
public:
Student(const char initId[], double gpa);
bool Student::isLessThanByID(const Student &s2) const;
bool qualifyForHonor(double minGpaForHonor) const;
void print()const;
private:
const static int MAX_CHAR = 100;
char id[MAX_CHAR];
double gpa;

};
#endif

最佳答案

How the function knows about s1 if it's not being passed in?

每个成员函数都有一个隐含的(隐藏的)第一个参数,它传递一个指向“当前”对象的指针(在该函数中作为this可用)。想象一下

bool Student::isLessThanByID(const Student &s2) const
{
return strcmp( /* s1. */ id, s2.id) < 0;
}

实际上是这样的

bool Student::isLessThanByID(const Student* this, const Student &s2) // not real code
{
return strcmp(this->id, s2.id);
}

类似地,假设调用

s1.isLessThanByID(s2);

实际上是

Student::isLessThanByID(&s1, s2); // not real code

请注意,isLessThanByID 中没有可用的 s1。该对象存在于函数定义之外,因此您不能在内部使用它。而不是 s1.id 只需编写 this->id,或者简单地说,只需编写 id(它将被解释为 this->id 隐含在你的情况下)。

关于c++ - 关于类和对象的初学者问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61429252/

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