将数组从类传递给main

时间:2013-11-22 16:05:56

标签: c++ arrays class object

我试图在一个单独的类文件中创建一个包含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);

        }

}

};

3 个答案:

答案 0 :(得分:1)

三个字:使用成员变量。

答案 1 :(得分:1)

您的EmployeeArray10类没有返回指向它创建的数组的指针,因此无法从构造函数外部访问(因此也无法删除,这意味着您有内存泄漏)。

构造函数也不能具有返回类型。您需要为EmployeeArray10编写一个解构函数来修复内存泄漏,然后编写一个返回指向数组的指针的函数,以便您可以在类外部实际使用它。

坦率地说,如果可以的话,只需使用现代C ++设施,例如std::vector<Employee>

答案 2 :(得分:1)

这在很多方面都有很多瑕疵,我甚至不知道从哪里开始,但我会说明一些基本的错误让你开始学习。您可能想要查看我突出显示的字词:

  1. 您的类EmployeeArray10没有成员变量。它只有一个建设者。没有标准变量意味着它不能有任何状态或存储任何东西。
  2. 构造函数分配内存,永远不会将指针存储在任何地方。这意味着你有一个内存泄漏
  3. 在标题中包含您从未在那里使用过的标准标题。为什么?
  4. 在使用指令的相同标头中。永远不要在头文件中这样做。它将在整个项目中溢出命名空间,使名称空间无效。
  5. 您可以为许多getter和setter定义 way 封装有一个原因,你可以通过让所有东西都可访问来打破它。
  6. 在两个for循环中,你从0循环到10,包括 10.意思是你试图访问11个只有10个成员的成员。阅读初学者选择的教科书中的循环。
  7. toString()是将某些内容转换为字符串的函数的名称。在你的情况下,它做了不同的事情。为您的职能提供有意义的名称,而不是误导性的名称。
  8. employeeArray[i].EmployeeArray10.Employee.tostring();完全没有意义:

    • EmployeeArray10没有operator[],因此employeeArray[i]毫无意义。我假设您想要访问该阵列中的第i个员工。
    • 员工没有成员变量EmployeeArray10,因此employeeArray[i].EmployeeArray10毫无意义。
    • employeeArray[i].EmployeeArray10.Employee
    • 相同
    • 也许你的意思是employeeArray[i].tostring(),但人们只能猜测。编译器不能,所以他就会逃跑。
  9. 说实话,整个代码看起来像是从其他地方复制和粘贴代码,而不是完全理解你(或代码)正在做什么。你应该阅读一本关于语言基本概念的好书,然后一步一步地继续。