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

При любой попытки изменения surname всё равно будет выводить данные из конструктора, как это исправить?

#include <iostream>
#include <string>
using namespace std;

class Person
{
protected:
    string snils, surname, name, patr, gender, birthday;
public:
    Person()
    {
        surname = "Nulikov";
        name = "Rafik";
        patr = "Ivanovich";
        gender = "M";
        birthday = "05.05.2003";
    }
    void changeName()
    {
        cin >> surname;
    }
    virtual void getInfo()
    {
        
    }

};
class GetSurnameNP : public Person
{
    void getInfo() override
    {
        cout << surname << " " << name << " " << patr << " " << endl;
    }   

};
class GetSNP : public Person
{
    void getInfo() override
    {
        cout << surname[0] << name[0] << patr[0];
    }
};

int main()
{
    setlocale(LC_ALL, "ru");
    Person info;

    

    GetSurnameNP surnameNP;
    Person* someinfo1 = &surnameNP;
    info.changeName();
    someinfo1->getInfo();

    GetSNP SNP;
    Person* someinfo2 = &SNP;
    someinfo2->getInfo();



}



Ответы (0 шт):