繁体   English   中英

如何更改struct对象的成员值? (C ++ struct beginner)

[英]How to change the member value of a struct object? (C++ struct beginner)

刚开始学习结构,我以为我理解它们是如何工作的,使用点运算符来访问对象的成员,但我显然不这样做,因为下面的readEmployeeRecord函数根本不起作用。 我该怎么做? (代码简短,自我解释)

非常感谢您花时间进一步向我解释结构! 当然我首先尝试谷歌,但我找不到一个输入数据的例子我想要的方式,并不知道我应该如何去做。

#include <iostream>
#include <iomanip>

using namespace std;

//Employee type
struct Employee{
    float wage;
    char status;
    char dept[4]; //for 3letter department, last position is \0 correct?
};

//function definitions
void readEmpoyeeRecord(Employee staff);
void printEmployeeRecord(Employee staff);

int main(){

    Employee employeeA;
    readEmpoyeeRecord(employeeA);
    printEmployeeRecord(employeeA);
    return 0;
}
void readEmpoyeeRecord(Employee employee){
    cout << "Enter empolyees wage: ";
    cin >> employee.wage;
    cout << "Enter empolyees status (H or S): ";
    cin >> employee.status;
    cout << "Enter empolyees dept (ABC): ";
    cin >> employee.dept;
}
void printEmployeeRecord(Employee staff){
    cout << "Wage:     Status:     Department:" <<endl;
    cout << fixed << setprecision( 2 ) << staff.wage;
}

首先,尝试搜索谷歌“通过引用和值传递参数”。

你会了解到:

void readEmpoyeeRecord(Employee staff);

通过值将变量传递给函数,这意味着在函数内创建并使用对象的副本,因此不会修改原始对象,而是复制。

要获得所需结果,请使用:

void readEmpoyeeRecord(Employee& staff);

通过引用传递意味着您传递完全相同的对象,而不是副本。

你的代码基本上会像这样工作:

//create new employee
Employee employeeA;
//call method readEmployeeRecord on a copy of employeeA
readEmpoyeeRecord(employeeA);
//call method printEmployeeRecord on a copy of employeeA
printEmployeeRecord(employeeA);

readEmpoyeeRecord(Employee employee)是按值复制的,而不是引用,因此您将丢失更改。

请改用readEmpoyeeRecord(Employee& employee)

您的问题是在C ++中,对象按值传递,直到您另行指定。 因此,在readEmpoyeeRecord的主体中,您处理的是employeeA的副本,而不是employeeA本身。

传递对readEmpoyeeRecord函数的引用。 readEmpoyeeRecord的签名应为:

void readEmpoyeeRecord(Employee &employee)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM