Как использовать элементы struct в функции-члене struct? - PullRequest
0 голосов
/ 13 ноября 2018

Таким образом, цель программы - создать массив из 3 человек, позволить пользователю заполнять данные в цикле for, гарантировать, что результаты пишутся с заглавной буквы, и выводить результаты.Этими новыми проектами были инструкции: 1. Переписать capitalize () как метод внутри структуры.2. Перепишите printPerson () как метод в структуре

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

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

struct Person {
    string firstName;
    string middleName;
    string lastName;
    int age;
    string gender;

    void capitalize(Person &arg);
    void printPerson(Person arg);
};

Уверен, что это методы прямо здесь, но я неубедитесь, что (person & arg) и (person arg) сами являются аргументами или они являются параметрами.Я думал, что это часть «arg», но я не могу найти способ запустить программу без них, так как я почти уверен, что мне нужен оператор & of для изменения информации.

int main(void) {
   Person myPerson;
   Person a[3];
   const int size = 5;

   for (int i = 0; i <= 2; i++) {
       cout << "What is First Name #" << i + 1 << "? ";
       getline(cin, a[i].firstName);
       cout << "What is Middle Name #" << i + 1 << "? ";
       getline(cin, a[i].middleName);
       cout << "What is Last Name #" << i + 1 << "? ";
       getline(cin, a[i].lastName);
       cout << "Age #" << i + 1 << "? ";
       cin >> a[i].age;
       cin.ignore();
       cout << "Male or Female #" << i + 1 << "? ";
       getline(cin, a[i].gender);
       cout << endl;
    }

    for (int i = 0; i <= 2; i++) {
        myPerson.capitalize(a[i]);
        cout << "PERSON #" << i + 1 << endl;
        cout << "~~~~~~~~~~~~~~~" << endl;
        myPerson.printPerson(a[i]);
    }

    system("pause");
    return 0;
}

Наряду с этим, я не знаю, как манипулировать функциями для работы без «параметров / аргументов» (я не уверен в разнице на данный момент) или без «arg»

void Person::capitalize(Person &arg) {
    transform(arg.firstName.begin(), arg.firstName.end(), arg.firstName.begin(), ::toupper);
    transform(arg.middleName.begin(), arg.middleName.end(), arg.middleName.begin(), ::toupper);
    transform(arg.lastName.begin(), arg.lastName.end(), arg.lastName.begin(), ::toupper);
}

void Person::printPerson(Person arg) {
    cout << "\nFirst Name: " << arg.firstName << endl;
    cout << "\nMiddle Name: " << arg.middleName << endl;
    cout << "\nLast Name: " << arg.lastName << endl;
    cout << "\nAge: " << arg.age << endl;
    cout << "\nGender: " << arg.gender << endl;
    cout << "\n\n";
}

1 Ответ

0 голосов
/ 13 ноября 2018

capitalize и printPerson теперь являются членами (обычно называемыми методами) структуры Person.Это означает, что они работают с переменными-членами экземпляра Person.Таким образом, вы можете просто получить доступ ко всем членам классов в этих методах.Смотрите следующий код.Я также дополнил его конструктором и сделал его немного более читабельным.

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

struct Person {
public:
    Person();
    void readFromUserInput();
    void capitalize();
    void print();
public:
    string firstName;
    string middleName;
    string lastName;
    int age;
    string gender;
};

Person::Person() :
    firstName(""),
    middleName(""),
    lastName(""),
    age(0),
    gender("")
{

}

void Person::readFromUserInput()
{
    cout << "What is the First Name ? ";
    getline(cin, firstName);

    cout << "What is Middle Name ? ";
    getline(cin, middleName);

    cout << "What is Last Name ? ";
    getline(cin, lastName);

    cout << "Age ? ";
    cin >> age;
    cin.ignore();

    cout << "Male or Female ? ";
    getline(cin, gender);
}

void Person::capitalize() 
{
    transform(firstName.begin(), firstName.end(), firstName.begin(), ::toupper);
    transform(middleName.begin(), middleName.end(), middleName.begin(), ::toupper);
    transform(lastName.begin(), lastName.end(), lastName.begin(), ::toupper);
}

void Person::print() 
{
    cout << "\nFirst Name: " << firstName << endl;
    cout << "\nMiddle Name: " << middleName << endl;
    cout << "\nLast Name: " << lastName << endl;
    cout << "\nAge: " << age << endl;
    cout << "\nGender: " << gender << endl;
    cout << "\n\n";
}

int main(void)
{
    const int NUM_PERSONS = 3;
    Person a[NUM_PERSONS];

    for (int i = 0; i < NUM_PERSONS; i++)
    {
        cout << "### " << (i + 1) << ". User:" << endl;
        a[i].readFromUserInput();
        cout << endl;
    }

    for (int i = 0; i < NUM_PERSONS; i++) 
    {
        a[i].capitalize();
        cout << "PERSON #" << i + 1 << endl;
        cout << "~~~~~~~~~~~~~~~" << endl;
        a[i].print();
    }

    system("pause");
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...