2016-04-11 4 views
0

Ich lese dieses book und ich habe Probleme, etwas von dem Code zu verstehen, der darin geschrieben ist. Das Programm soll als Basis-Datenbank für ein Unternehmen fungieren. Es sollte Mitarbeiterobjekte enthalten, die ihr Gehalt, ihren Status in der Firma (gemietet/entlassen) enthalten und über Methoden verfügen, die Sie für die Aktualisierung dieses Objekts aufrufen können.C++ - Referenzparameter Verwendet

Dies ist der Code, den sie

#pragma once 

#include <string> 

namespace Records { 
    const int kDefaultStartingSalary = 30000; 

    class Employee 
    { 
    public: 
     Employee(); 

     void promote(int raiseAmount = 1000); 
     void demote(int demeritAmount = 1000); 
     void hire(); // Hires or rehires the employee 
     void fire(); // Dismisses the employee 
     void display() const;// Outputs employee info to console 

     // Getters and setters 
     void setFirstName(const std::string& firstName); 
     const std::string& getFirstName() const; 

     void setLastName(const std::string& lastName); 
     const std::string& getLastName() const; 

     void setEmployeeNumber(int employeeNumber); 
     int getEmployeeNumber() const; 

     void setSalary(int newSalary); 
     int getSalary() const; 

     bool getIsHired() const; 

    private: 
     std::string mFirstName; 
     std::string mLastName; 
     int mEmployeeNumber; 
     int mSalary; 
     bool mHired; 
    }; 
} 

bieten kann ich nicht scheinen zu verstehen, warum auf der setFirstName und setLastName sie durch Bezugnahme in die Übergabe von Parametern in sind, dann in anderen Setter/Getter (wie setSalary) sie sind nach Wert übergeben. Wenn jemand erklären könnte, warum dies eine gute Praxis ist, wäre das ausgezeichnet! Sie haben ihre Wahl im Buch nicht erklärt.

+0

http://stackoverflow.com/questions/2582797/why-pass-by-const-reference-instead-of-by-value –

Antwort

0

Durch Verweis zu verweisen bedeutet, dass Sie keine Kopie der Daten im Speicher erstellen müssen, nur für den Funktionsaufruf, da Sie nur die Adresse senden, also verwenden Sie die Originaldaten (d. H auch warum möchten Sie es vielleicht zu einem const Verweis machen). Für eine einfache Variable ist es nicht wirklich wichtig im Sinne von Leistung, aber bei größeren Objekten ist es schneller, eine Kopie davon zu vermeiden.

Eine Grundannahme zu beginnen ist, dass es eine gute Idee ist, Referenzen für Objekt und Werte für Variablen zu verwenden. Aber in einigen Fällen hängt es wirklich von vielen anderen Dingen ab. Zum Beispiel, wenn die Funktion eine Menge schwerer Berechnung durchführen wird, und Sie einen Verweis auf ein Objekt haben, das irgendwo im Speicher sein kann, dann können Sie Cache-Misses bekommen, die Sie Leistung kosten werden. Es gibt also viele mögliche Dinge für verschiedene Situationen zu berücksichtigen. Aber a priori ist die Regel.von.thumb, um Referenzen für Objekte und Nebenwerte für Variablen zu verwenden, ein insgesamt guter Ansatz.

Verwandte Themen