c++ - 如何在结构的成员函数中使用结构成员?
问题描述
所以程序的目的是创建一个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";
}
解决方案
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;
}
推荐阅读
- reactjs - React 应用程序不适用于 apollo 客户端,跨域错误
- java - 为什么我的代码在使用文本文件时打印空数组([])?
- ios - 在异步工作完成之前关闭返回数据
- react-native - 如何从另一个组件以编程方式在 React Native 中更改选项卡栏图标?
- mongodb - 从不同的容器连接到 mongo - 连接被拒绝
- java - 给定邻接规则和无序数组,返回符合规则的数组
- java - 在 Eclipse 中生成 JavaDocs 时出现“未找到模块”消息
- c++ - 失败,错误 87:参数不正确。如何判断哪个参数不正确?
- java - Runtime.getRuntime().exec(command) 不做任何事情
- vue.js - 如何在 if 条件下设置数据变量的值