我编写了以下代码,它工作得很好。然而让我困惑的是,当我创建一个Student对象例如'a',然后我在其上调用一个成员函数a.calculator(a)。当我使用点运算符在同一个对象上调用函数时,我将相同的对象作为参数传递,这不是多余的。任何解释都将不胜感激。
#include <iostream>
using namespace std;
struct Semester{
int credits;
int gradePoints;
};
class Student{
private:
string name;
string major;
Semester cgpa[8];
public:
Student();
Student(string name, string major);
int calculator(Student &a);
void enterGrades(Student &a);
};
Student::Student(){
name = "-";
major = "Undeclared";
}
Student::Student(string name_, string major_){
name = name_;
major = major_;
}
int Student::calculator(Student& a){
int cgpa = 0;
int gpa = 0;
for (int i = 0; i < 8; ++i){
gpa = (a.cgpa[i].credits * a.cgpa[i].gradePoints)/ a.cgpa[i].credits;
cgpa = cgpa + gpa;
}
return cgpa/8;
}
void Student::enterGrades(Student& a){
int credits;
int gp;
for (int i = 0; i < 8; ++i){
cout<<"Enter Semester "<<i+1<<" credits: ";
cin>>credits;
a.cgpa[i].credits = credits;
cout<<"Enter Semester "<<i+1<<" grade points: ";
cin>>gp;
a.cgpa[i].gradePoints = gp;
}
}
int main(){
Student a("Hasan", "CS");
a.enterGrades(a);
cout<<"The students CGPA is "<<a.calculator(a)<<endl;
}
答案 0 :(得分:0)
当我使用点运算符在同一个对象上调用函数时,我将同一个对象作为参数传递,这是多余的。
如果你总是使用相同的对象打电话,那就多余了。但是,使用参数可以传递除调用对象之外的其他对象。
从另一个角度来看:函数成为非静态成员函数是多余的,因为它不使用this
的任何成员。