使用类和数组:为什么我的输出内存位置



我正试图将4个不同的值传递给固定数组的每个元素。但是,当我尝试输出时,控制台输出的是内存位置,而不是我想要看到的值。该程序的目的是使用数组存储Employee数据,并使用for循环遍历数据并将其打印到控制台。为了将数组的输出从内存位置转换为所需的值,我必须添加什么?

#include <iostream>
#include <cmath>
#include <string>
using namespace std;
class Employee
{
int empNumber;
string name;
double hours, payRate;
public:
Employee()
{
int empNumber = 0;
double hours=0, payRate = 0;
string name = "Name";
}
Employee(int empNmb, double hrs, double payRT, string nm)
{
empNumber = empNmb;
hours = hrs;
payRate = payRT;
name = nm;
}
void getEmployeeData()
{
for (int i = 0; i < 4; i++)
{
cout << empNumber;
cout << hours;
cout << payRate;
cout << name;
}
}
};
int main()
{
Employee e;
Employee list[4];
list[0] = Employee(9991, 25, 15, "Jeff");
list[1] = Employee(8791, 21, 15, "Mohamed");
list[2] = Employee(9211, 15, 35, "Mary");
list[3] = Employee(5271, 35, 15, "Bob");

e.getEmployeeData();
system("Pause");
return 0;
}

在此处输入图像描述

首先需要修改getEmployeeData((函数,如下所示:

void getEmployeeData()
{
cout << empNumber<<" ";
cout << hours << " ";;
cout << payRate << " ";;
cout << name << " ";;
}

然后只需将您的主代码替换为以下代码:

int main()
{
Employee e[4];
e[0] = Employee(9991, 25, 15, "Jeff");
e[1] = Employee(8791, 21, 15, "Mohamed");
e[2] = Employee(9211, 15, 35, "Mary");
e[3] = Employee(5271, 35, 15, "Bob");
for (int i = 0; i < 4; i++)
{
e[i].getEmployeeData();
cout << endl;
}
system("Pause");
return 0;
}

早期代码的问题在于,您使用的不是创建的列表,而是类的其他实例。

您的构造函数正在初始化与成员名称相似的局部变量。事实上,如果你使用g++进行编译,如果你在编译中放上-Wall标志,它会警告你

此外,C++不一定会根据构造函数中的出现顺序初始化成员(它可能会根据它们的声明顺序进行初始化(,因此,始终根据成员的声明顺序初始化它们。这可能会导致难以调试的错误。

您的代码应该是:

#include <string>
class Employee
{
int empNumber;
double hours;
double payRate;
std::string name;

public:
Employee() : 
empNumber(0),
hours(0),
payRate(0),
name("Name")
{
}
Employee(int empNmb, double hrs, double payRT, std::string nm) :
empNumber(empNmb),
hours(hrs),
payRate(payRT),
name(nm)
{
}
};

关于打印-List<Employee>与类本身之间没有连接,因此,您无法从类内部访问它。有两个选项,要么使用getters/ssetters(这很常见(,要么创建一个print函数,打印一个对象,然后在列表中的对象上循环。

// inside of class Employee
int get_empNumber() const { return empNumber; }
double get_hours() const { return hours; }
double get_payRate() const { return payRate; }
std::string get_name() const { return name; }
void print() const
{
std::cout << "(" 
<< empNumber << ", " 
<< hours << ", "
<< payRate << ", "
<< name << std::endl;
}

最新更新