我正在学习c ++,我已经完成了一本基础介绍书。现在我已经购买了一本名为“专业c ++”的书,但它很棒......
书中有关于如何编写员工数据库的示例代码,我已经完成了,但为了更好地理解我已经考虑过编写一个基于该程序的程序,但是用于监狱服务。它会产生随机的监狱号等。这只是头文件,我今天就开始研究它了,想知道一些事情。
#pragma once
#include <string>
namespace Records
{
class Prisoner
{
public:
Prisoner(); //prisoner constructor
void addTime(int years);
void reduceTime(int years);
void prisonNumber();
void display();
// getters and setters
void setFirstName(const std::string& firstName); //
const std::string& getFirstName();
// private data members
private:
std::string mFirstName;
std::string mLastName;
int mPrisonNumber;
};
}
我不明白的是行
void setFirstName(const std::string& firstName); //
const std::string& getFirstName();
我的理解是它是一个不返回任何内容的函数(void),接受一个名为firstName的字符串指针参数。
我将在免费的.cpp中定义此函数,如下所示;
void Prisoner::setFirstName(const string& firstName)
{ mFirstName = firstName;}
我在这里做的字面翻译是什么?
我认为我正在获取字符串的字符串地址并将其分配给数据成员...
如果我必须诚实,我需要研究数据库是什么以及它们是如何使用的,我已经完成了关于指针和课程的练习,但我实际上无法用语言说出正在发生的事情。 有人可以建议一些阅读材料/来源,以便我可以增加我的理解。我看过亚马逊,但被所有不同的书籍所淹没。
答案 0 :(得分:2)
const std::string &getFirstName(); /* Getter */
void setFirstName(const std::string &firstName); /* Setter */
这些函数获取datamember值( getter )或设置datamember值( setter )。
吸气剂和制定者都在那里,所以班级的用户不需要明确地获取数据库,而是通过你的功能。
getter和setter背后的原因是,例如,您可以在将其设置为数据库之前验证传递给setter的字符串。
const std::string &firstName
不是一个指针,而是传递的变量的地址,因此setter不会复制传递的字符串。
答案 1 :(得分:1)
void Prisoner::setFirstName(const string& firstName)
{ mFirstName = firstName;}
意思是: 附加到类型为Prisoner的对象的函数(方法)setFirstName()需要引用(避免复制)到字符串并承诺保持不变(常量)。 然后它将成员mFirstName(由Prisoner隐含)并将该值复制到其中。
如果没有const,则可以修改值。它在功能上对你的代码没有任何影响,它只是一个警卫,以确保你不打算修改一些东西。
&amp;在一个类型之后它意味着它是一个引用,所以它将直接读取你传递它的对象,而不是为它自己使用它作为该函数的副本。
最后,它通过复制内容将类的成员设置为该值,一个成员是附加到该类的合格数据,在您的情况下是一个非常简单的成员,然后将成为Prisoner.mFirstName。
注意练习如何将成员声明为私有,这意味着它们只能从类的实现中修改,而不是从外部通过任何代码“使用”类生成的对象进行修改。
正因为如此,并且因为您确实希望能够读取和写入该数据,尽管是以受控方式,但实现了setter和getter方法,允许通过这些公共更改类所拥有的数据(成员)功能(方法)。
有些人对setter / getter发誓,有些人不喜欢它,最终只是一个设计选择,你是想将数据绑定到一个对象作为私有,并门户/管理所有外部访问(公共方法改变私人数据) ,或直接公开(让这些成员公开)。YouTube目前有许多优秀的初级C ++课程。书籍建议往往是在SO的规则的边缘,因为我认为它们被认为是一个意见问题,但你可以找到一些非常受欢迎的问题,一些是wikified,这是推荐书籍的非官方列表。 就个人而言,我一直很喜欢Stroustrup,我认为他毕竟是因为成为C ++的老兄所欠的钱:)但他有时会非常简洁和简洁,以至于需要不成比例的努力来阅读。他的初学者原则和实践对于想要再次阅读初学者材料的人来说无疑是一本好书。
答案 2 :(得分:0)
......的简要翻译。
void Prisoner::setFirstName(const string& firstName) {
mFirstName = firstName;
}
......将是:
将您传递给成员函数setFirstName的某些外部字符串的数据复制为“firstName”,复制到mFirstname,这是一个类内私有字符串。