2015-01-25 2 views
0

Я изучаю C++, я закончил базовую книгу. Теперь я приобрел книгу под названием «Профессиональный C++», но ее отличная ...Основные проблемы программирования на C++

В книге есть пример кода о том, как написать базу данных сотрудника, я завершил это, но чтобы получить лучшее понимание i подумали о написании программы, основанной на этой программе, но для тюремной службы. Он генерирует случайные номера тюрьмы и т. Д. Это всего лишь файл заголовка, я начал работать над ним сегодня и хотел бы знать несколько вещей.

#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(); 

Я понимаю, что это функция, которая возвращает ничего (пустоту), принимает строку указатель аргумент с именем FirstName.

Я определю эту функцию в бесплатном .cpp следующим образом;

void Prisoner::setFirstName(const string& firstName) 
    { mFirstName = firstName;} 

Что было бы буквальным переводом того, что я здесь делаю?

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

Если я должен быть честным, мне нужно изучить, что datamembers и как они используются, у меня есть завершенные упражнения по указателям и классам, но я не могу сказать словами, что происходит. Может кто-нибудь предложить некоторые материалы для чтения/источники, так что я могу увеличить свое понимание. Я посмотрел на амазонку, но был завален всеми доступными книгами.

+0

Вы спрашиваете, какие данные являются членами или что делает setFirstName? – Beta

+0

Эти вещи объясняются в любом подходящем учебнике на C++. Какой учебник вы используете для обучения? –

+0

Что делает setFirstName. Но теперь я понимаю, факт, что я задаю этот вопрос, показывает, что мне нужно большее понимание членов данных. Программирование на C++ - это простое выполнение его вызова. –

ответ

1
void Prisoner::setFirstName(const string& firstName) 
{ mFirstName = firstName;} 

будет означать: функция (метод) setFirstName(), прикрепленный к объектам типа Заключенный требует ссылки (избегает копирования) в строку и обещает оставить его нетронутым (константа). Затем он принимает член mFirstName (подразумеваемый принадлежащий заключенному) и копирует его в него.

Если бы не было const, значение могло бы быть изменено на месте. Он функционально не имеет никакого значения в вашем коде, это «просто» охранник, чтобы убедиться, что вы не модифицируете что-то, когда вы этого не намерены.

& после типа означает, что это ссылка, поэтому он будет читать объект, через который вы передаете его, вместо того, чтобы сделать его копию для собственного использования в этой функции.

Наконец, он устанавливает член класса в это значение, копируя содержимое, причем член является квалифицированной частью данных, прикрепленной к этому классу, в вашем случае очень простой, который затем станет Prisoner.mFirstName.

Обратите внимание, что в упражнении вы объявляете членов как закрытых, это значит, что они могут быть изменены только внутри реализации класса, а не снаружи каким-либо кодом будут «использовать» объекты, созданные классом.

Из-за этого и потому, что вы хотите иметь возможность читать и записывать эти данные, хотя и контролируемым образом, применяются методы setter и getter, которые позволяют изменять данные (участника), принадлежащие классу, через те публичные функции (методы).

Некоторые люди клянутся сеттером/геттером, некоторым людям это не нравится, в конечном итоге это просто выбор дизайна, хотите ли вы привязывать данные, привязанные к объекту, как частные, и управлять затвором/управлять всем внешним доступом к нему (общедоступные методы, изменяющие личные данные), или разоблачить его напрямую (сделать их членами общедоступными).

В наши дни на YouTube есть много хороших курсов C++ для начинающих. Рекомендации по книге, как правило, лежат на краю правил здесь, потому что я считаю, что они считаются предметом мнений, но вы можете найти очень популярные вопросы, некоторые из которых связаны с викификацией, которые являются неофициальным списком рекомендованных книг. Лично мне всегда нравился Stroustrup, и я думаю, что он был обязан за то, что он был папой C++ в конце концов :), но он может быть очень кратким и кратким время от времени, до такой степени, что требуется непропорциональное усилие для чтения. Его начинающие принципы и практика - это, безусловно, хорошая книга для тех, кто хочет снова перечислить материал новичка.

2
const std::string &getFirstName();    /* Getter */ 
void setFirstName(const std::string &firstName); /* Setter */ 

Эти функции получает значение DataMember (геттер) или задает значение DataMember (сеттер).
Здесь есть получатели и сеттеры, поэтому пользователю класса не нужно явно получать данные, а скорее через вашу функцию.

Причина, лежащая в основе геттеров и сеттеров, заключается в том, что вы можете, например, проверить строку, переданную установщику, перед тем, как установить ее на дату.


Кстати, const std::string &firstName is не указатель, но адрес переданной переменной, поэтому сеттер не будет копировать переданную строку.

+3

Возможно, добавьте что-то, чтобы уточнить, что 'const string & firstName' является _not_ указателем. – Mat

+0

Спасибо, расчистил это для меня. Не могли бы вы дать мне некоторые названия некоторых книг/сайтов, которые помогли вам на вашем пути при обучении программированию? алгоритмы/элементы данных и т. д.? –

+0

@ HMPARTICLE Честно говоря, единственная книга, которую я изучил, - это книга C, названная: ** Изучите С трудным способом **. Я изучил «C++», много практикуя, и я использовал свои знания о «C» в сочетании с «Java» (классы, геттеры/сеттеры и другие элементы ООП). – Houssni

0

Буквальный перевод ...

void Prisoner::setFirstName(const string& firstName) { 
    mFirstName = firstName; 
} 

... будут:

Скопируйте данные некоторой внешней строки, которые вы передаете в функции члена setFirstName как «ПгвЬЫат», в mFirstname , частная строка в классе.

+0

Он не указывает на это. Он делает копию –

Смежные вопросы