我试图在一个单独的类文件中创建一个包含10个Employee对象的数组,然后从我的主文件中访问它。我有三个单独的文件。 Employee.cpp,Employee.h和EmployeeArray10.h
Employee.cpp显然是主要的,Employee.h包含Employee()类的构造函数,getter和setter,而EmployeeArray10.h是创建十个Employee()对象的数组的地方。我遇到的问题是如何创建和访问从main()在EmployeeArray10.h文件中创建的数组,并因此使用employeeeeArray10.h中创建的对象的employee()类中的tostring()函数< / p>
我一直盯着这几个小时,我们将非常感谢指导。请告诉我这是不是很清楚。
#include <iostream>
#include <string>
#include "Employee.h"
#include "EmployeeArray10.h"
using namespace std;
int main(){
Employee employee1;
Employee employee2(001, "Rob", "Address");
Employee employee3(002, "Tom", "The Street", "Science Dept", 25000.00, "99-CW-4753");
employee1.tostring();
employee2.tostring();
employee3.tostring();
EmployeeArray10 employeeArray;
for(int i=0; i <=10; i++){
employeeArray[i].EmployeeArray10.Employee.tostring();
}
return 0;
}
Employee.h:
#include <iostream>
#include <string>
using namespace std;
class Employee
{
private:
int number;
string name;
string address;
string department;
double salary;
string regNumber;
// CONSTRUCTOR METHODS
public:
Employee()
{
setNumber(0);
setName("");
setAddress("");
setDepartment("");
setSalary(0.0);
setRegNumber("");
}
Employee(int pNum, string pName, string pAddress)
{
setNumber(pNum);
setName(pName);
setAddress(pAddress);
setDepartment("");
setSalary(0.0);
setRegNumber("");
}
Employee(int pNum, string pName, string pAddress, string pDepartment, double pSalary, string pRegNumber)
{
setNumber(pNum);
setName(pName);
setAddress(pAddress);
setDepartment(pDepartment);
setSalary(pSalary);
setRegNumber(pRegNumber);
}
// SET METHODS
void setNumber(int pNum)
{
number = pNum;
}
void setName(string pName)
{
name = pName;
}
void setAddress(string pAddress)
{
address = pAddress;
}
void setDepartment(string pDepartment)
{
department = pDepartment;
}
void setSalary(double pSalary)
{
salary = pSalary;
}
void setRegNumber(string pRegNumber)
{
regNumber = pRegNumber;
}
// GET METHODS
int getNumber()
{
return number;
}
string getName()
{
return name;
}
string getAddress()
{
return address;
}
string getDepartment()
{
return department;
}
double getSalary()
{
return salary;
}
string getRegNumber()
{
return regNumber;
}
// MISC METHODS
void tostring()
{
cout << "\n\nEmployee Object\nNumber: " << number <<
"\nName: " << name <<
"\nAddress: " << address <<
"\nDepartment: " << department <<
"\nSalary: " << salary <<
"\nTax payable: " << taxPayable(salary) <<
"\nCar reg. no.: " << regNumber <<"\n\n";
}
double taxPayable(double mSalary){
double result = 0;
if (mSalary <= 20000 && mSalary >=1){
result = mSalary * 0.2;
}
else if(mSalary > 20000){
result = (20000 * 0.2) + ((mSalary - 20000) * 0.4);
}
return result;
}
};
EmployeeArray10.h
#include <iostream>
#include <string>
using namespace std;
class EmployeeArray10{
public:
EmployeeArray10(){
Employee *newEmpArray = new Employee[10];
for(int i=0; i <=10; i++){
newEmpArray[i].setNumber(i+1);
}
}
};
答案 0 :(得分:1)
三个字:使用成员变量。
答案 1 :(得分:1)
您的EmployeeArray10类没有返回指向它创建的数组的指针,因此无法从构造函数外部访问(因此也无法删除,这意味着您有内存泄漏)。
构造函数也不能具有返回类型。您需要为EmployeeArray10编写一个解构函数来修复内存泄漏,然后编写一个返回指向数组的指针的函数,以便您可以在类外部实际使用它。
坦率地说,如果可以的话,只需使用现代C ++设施,例如std::vector<Employee>
。
答案 2 :(得分:1)
这在很多方面都有很多瑕疵,我甚至不知道从哪里开始,但我会说明一些基本的错误让你开始学习。您可能想要查看我突出显示的字词:
toString()
是将某些内容转换为字符串的函数的名称。在你的情况下,它做了不同的事情。为您的职能提供有意义的名称,而不是误导性的名称。行employeeArray[i].EmployeeArray10.Employee.tostring();
完全没有意义:
operator[]
,因此employeeArray[i]
毫无意义。我假设您想要访问该阵列中的第i个员工。EmployeeArray10
,因此employeeArray[i].EmployeeArray10
毫无意义。employeeArray[i].EmployeeArray10.Employee
employeeArray[i].tostring()
,但人们只能猜测。编译器不能,所以他就会逃跑。说实话,整个代码看起来像是从其他地方复制和粘贴代码,而不是完全理解你(或代码)正在做什么。你应该阅读一本关于语言基本概念的好书,然后一步一步地继续。