我正在读这个book而我无法理解写在其中的一些代码。该程序应该作为公司的基本数据库。它应该包含员工对象,其中包含他们的薪水,公司状态(雇佣/解雇),并且有一些方法可以调用该对象来更新它。
这是他们提供的代码
#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;
};
}
我似乎无法理解为什么在 setFirstName 和 setLastName 上他们通过引用传入参数,然后在其他setter / getters中(如 setSalary )它们正在传递值。如果有人能解释为什么这是一个好习惯,那就太棒了!他们没有在书中解释他们的选择。
答案 0 :(得分:0)
通过引用传递意味着您不必在内存中复制数据,仅用于函数调用,因为您只发送它的地址,因此您正在使用原始数据(也是为什么你可能想让它成为const
引用。对于一个简单的变量,它在性能意义上并不重要,但对于更大的对象,避免必须复制它更快。
一个基本的假设是,使用对象的引用和变量的值是个好主意。但在某些情况下,它确实取决于很多其他事情。例如,如果函数要进行大量繁重的计算,并且您有一些对象(可能在内存中的任何位置)的引用,那么您可能会遇到缓存未命中,从而导致性能损失。因此,针对不同情况需要考虑很多可能的事情。但是先验一下,rule.of.thumb使用对象的引用和变量的by-value是一种总体上的好方法。