在参加了两个学期的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");
}
答案 0 :(得分:2)
您遇到的问题是您将变量courseName
和courseGrade
保存为全局变量。因此,您将使用当前的Chemistry(当前为Chemistry)覆盖以前的类实例数据。您需要做的是将courseName
和courseGrade
的声明移到课程内的访问者private
内,如下所示:
class GradeBook {
private:
string courseName;
int courseGrade;
public:
//put your functions here
}
答案 1 :(得分:0)
代码存储值的位置是全局的,因此所有实例看起来都是相同的。