Как мне изменить разные элементы одного и того же с помощью функции-члена?

0

Я новичок в 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;
 }

Как мне это сделать? Я думал о перегрузке функции, но оба элемента одного типа. Я не хочу передавать лишние значения и заставляю код выглядеть дерьмовым. Есть идеи? Спасибо.

  • 0
    "Как мне изменить разные элементы одного и того же с помощью функции-члена?" - что? ... редактировать: ну хорошо, после прочтения всего, я понимаю. Но этот вопрос ... не очень хорошо сформулирован.
  • 1
    На мой взгляд, участники являются частными, поэтому у вас не будет доступа к ним за пределами вашего класса. Таким образом, вы не можете использовать employee.name в своей главной ...
Теги:
string
overloading

2 ответа

3
Лучший ответ

Используйте сеттеры и геттеры следующим образом:

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");
  • 0
    Исправлено, спасибо.
  • 0
    В геттере вы забыли двоеточие :
Показать ещё 2 комментария
0

Класс basic_string уже реализует "setter":

employee1.name.assign("Mary");
employee2.gender.assign("Female");

Если вы хотите получить доступ к name и gender как вы писали в своем вопросе, вам нужно сделать public, как @sop правильно указал.

  • 1
    Члены являются частными, так что это зря employee1.name.assign("X");
  • 0
    Правда спасибо Я обновил свой ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню