首页 > 解决方案 > 如何在结构的成员函数中使用结构成员?

问题描述

所以程序的目的是创建一个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";
}

标签: c++structparametersarguments

解决方案


Thecapitalize和 theprintPerson现在是 struct 的成员(通常称为方法)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;
}

推荐阅读