为什么同一个对象方法被调用两次?

时间:2016-07-17 02:06:39

标签: c++ visual-studio

在参加了两个学期的Java之后,我一直在做c ++自学。

下面是一个构建正常的简单程序,但是当我运行它时,我得到了两次调用的gradeBook2s displayInfo()方法。我确定它缺少一些基本的东西,但是为什么会有任何想法?

//GradeBook.h
#include<string>
#include<iostream>
using std::cout;
using std::endl;
using std::string;

string courseName;
int courseGrade;


class GradeBook {
public:
    GradeBook(string name, int grade) {
        setCourseName(name);
        setCourseGrade(grade);
    }

public:
    void setCourseName(string name) {
            courseName = name;
    }

public:
    string getCourseName() {
        return courseName;
    }

public:
    void setCourseGrade(int score) {
                courseGrade = score;
            }


public:
    int getCourseGrade() {
        return courseGrade;
    }

public:
    void displayInfo(){
        cout << "Course Name: " << getCourseName()
            << "Course grade: " << getCourseGrade()
            << endl;
    }
};


//main.cpp
#include<iostream>
#include "GradeBook.h"

int main() {
    GradeBook gradeBook1("Calculus 2", 90);
    GradeBook gradeBook2("Chemistry", 80);

    gradeBook1.displayInfo();
    system("pause");
    gradeBook2.displayInfo();
    system("pause");

}

2 个答案:

答案 0 :(得分:2)

您遇到的问题是您将变量courseNamecourseGrade保存为全局变量。因此,您将使用当前的Chemistry(当前为Chemistry)覆盖以前的类实例数据。您需要做的是将courseNamecourseGrade的声明移到课程内的访问者private内,如下所示:

class GradeBook {

private:
string courseName;
int courseGrade;

public:
//put your functions here
}

答案 1 :(得分:0)

代码存储值的位置是全局的,因此所有实例看起来都是相同的。