Я новичок в ООП и стараюсь самостоятельно учиться.Передача метода get в заданном методе
Я не уверен, о логической реализации этой простой (я чувствую, что это очень просто, но у меня есть ментальный блок) упражнение:
- Создать
Employee
класс, сname
,surname
иsalary
поля - Создайте 2 сотрудника и распечатайте их зарплату после 10% -ного увеличения.
Итак, вот мои файлы:
// employee.h
#ifndef EMPLOYEE_H
#define EMPLOYEE_H
#include <string>
using std::string;
class Employee {
private:
string name;
string surname;
float salary;
public:
Employee(string,string,float);
void setName(string);
void setSurname(string);
void setSalary(float);
string getName();
string getSurname();
float getSalary();
};
#endif // EMPLOYEE
employee.cpp
#include "employee.h"
Employee::Employee(string n,string c,float stip) {
Employee::setName(n);
Employee::setSurname(c);
Employee::setSalary(stip);
}
void Employee::setName(string n){
name=n;
}
void Employee::setSurname(string c){
surname=c;
}
void Employee::setSalary(float stip){
salary=(stip>=0)?stip:0;
}
string Employee::getName(){
return name;
}
string Employee::getSurname(){
return surname;
}
float Employee::getSalary(){
return salary;
}
increase.h
#ifndef INCREASE_H
#define INCREASE_H
namespace Increase {
const float inc2017=1.1;
}
#endif // INCREASE_H
О том, что основной файл я рассмотренного 2 возможности:
1) Использование переменная для локального сохранения зарплаты
float prov=a.getSalary();
a.setSalary(prov*Increase::inc017);
2) Передача метода GET в методе набора:
a.setSalary(a.getSalary()*Increase::inc2017);
Что лучше?
Является ли номер 2 логически правильным или я обхожусь в обход инкапсуляции таким образом?
(я знаю, что это не было действительно необходимо с помощью заголовка пространства имен в этой небольшой проблемой, но я работаю в сторону более крупного проекта, и я хотел бы быть морально готовы к этому)
Этот вопрос не имеет ничего общего с геттерами и сеттерами или инкапсуляцией, и почти весь код, который вы опубликовали, не имеет значения. Вы просто спрашиваете, следует ли предварительно получить результат вызова функции в переменную перед ее использованием? И это субъективный вопрос. –
Почему вы не делаете функцию 'увеличитьSalaryBy'? =) – SingerOfTheFall
^I второй @SingerOfTheFall всецело. Инкапсуляция связана с программной логикой, а не с прямым доступом к переменной, насколько это возможно. – StoryTeller