C++ 使用类和数组:为什么我的输出内存位置是?
我试图将4个不同的值传递给固定数组的每个元素。但是,当我尝试输出时,控制台输出的是内存位置,而不是我希望看到的值。该程序的目的是使用数组存储员工数据,并使用for循环遍历数据并将其打印到控制台。为了将数组的输出从内存位置转换为所需的值,我必须添加什么C++ 使用类和数组:为什么我的输出内存位置是?,c++,arrays,class,c++11,for-loop,C++,Arrays,Class,C++11,For Loop,我试图将4个不同的值传递给固定数组的每个元素。但是,当我尝试输出时,控制台输出的是内存位置,而不是我希望看到的值。该程序的目的是使用数组存储员工数据,并使用for循环遍历数据并将其打印到控制台。为了将数组的输出从内存位置转换为所需的值,我必须添加什么 #include <iostream> #include <cmath> #include <string> using namespace std; class Employee { int emp
#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;
}
构造函数正在初始化具有与成员相似名称的局部变量。事实上,如果您使用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)
{
}
};
首先,您需要修改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;
}
早期代码的问题在于,您使用的不是您创建的列表,而是该类的其他实例。这是因为int-empNumber=0;不会做你认为它会做的事。双倍工作小时数=0,工资率=0;也不是;,nor字符串名称=名称;。这不是在构造函数中初始化类成员的方式。所有这些语句所做的就是创建局部变量,其名称恰好与类成员相同。但并不真正初始化实际的类成员。有关构造函数中初始化类成员的更多信息和许多示例,您应该查看C++的书籍。GETAuthEdEATA成员正在打印四次未经触碰的、看似没有意义的对象的四个成员的值。填充后,要填充的数组列表将完全未使用。如果您想打印列表的内容,那么循环迭代该数组并打印其中的每个员工。这是否回答了您的问题@奥利弗文图拉补充了我的回答。谢谢!这帮助我让代码正常工作:D
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;
}