Я новичок в C++ и не могу найти ответ. Это код, который я хочу написать:
#include <iostream>
using namespace std;
class Employee{
private:
string name;
string gender;
public:
void display();
void update(string);
Employee(string a, string b){
name = a;
gender = b;
};
~Employee(){};
};
void Employee::display(void){
cout << "Name: " << name << endl;
cout << "Gender: " << gender << endl;
}
void Employee::update(string a){
/*
a function that updates either the
name element or gender element
based on which element it is used by.
*/
}
int main(){
Employee employee1 ("Joe","Male");
Employee employee2 ("Jon","Male");
employee1.display();
employee2.display();
employee1.name.update("Mary"); // This is what I want to do: Same function
employee2.gender.update("Female"); // for different elements of same type
employee1.display();
employee2.display();
return 0;
}
Как мне это сделать? Я думал о перегрузке функции, но оба элемента одного типа. Я не хочу передавать лишние значения и заставляю код выглядеть дерьмовым. Есть идеи? Спасибо.
Используйте сеттеры и геттеры следующим образом:
void Employee::setName(const string &a) {
this->_name = a; // validate or whatever you need to do
}
const string &Employee::name() const {
return this->_name;
}
void Employee::setGender(const string &a) {
// ....
}
Использование, как можно было бы ожидать
employee1.setName("Mary");
employee2.setGender("Female");
:
Класс basic_string
уже реализует "setter":
employee1.name.assign("Mary");
employee2.gender.assign("Female");
Если вы хотите получить доступ к name
и gender
как вы писали в своем вопросе, вам нужно сделать public
, как @sop правильно указал.
employee1.name.assign("X");
employee.name
в своей главной ...