2016-07-17 4 views
1

Я занимаюсь самообучением C++ после двух семестров Java.Почему метод тех же объектов называется дважды?

Ниже приведена простая программа, которая строит отлично, но когда я запускаю ее, я получаю метод 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

время, чтобы узнать, как использовать отладчик. –

+0

Посмотрите на какой-нибудь реальный код на C++, чтобы почувствовать стиль C++. Это код Java, написанный на C++. –

+0

предоставляется, но я следую C++. Как программировать Deitel, Deitel. – methionine

ответ

0

Места, в которых код хранит значения, являются глобальными, поэтому все экземпляры будут выглядеть одинаково.

2

Проблема в том, что вы сохраняете переменные courseName и courseGrade в качестве глобальных переменных. Из-за этого вы переписываете данные экземпляра предыдущего класса с текущим, в данном случае, с химией. Что вам нужно сделать, это переместить декларацию courseName и courseGrade внутри аксессору private внутри класса, как это:

class GradeBook { 

private: 
string courseName; 
int courseGrade; 

public: 
//put your functions here 
} 
Смежные вопросы