将对象传递给C ++中的函数

时间:2018-01-06 21:16:10

标签: c++ function object

我编写了以下代码,它工作得很好。然而让我困惑的是,当我创建一个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;

}

1 个答案:

答案 0 :(得分:0)

  

当我使用点运算符在同一个对象上调用函数时,我将同一个对象作为参数传递,这是多余的。

如果你总是使用相同的对象打电话,那就多余了。但是,使用参数可以传递除调用对象之外的其他对象。

从另一个角度来看:函数成为非静态成员函数是多余的,因为它不使用this的任何成员。