【问题标题】:Assigning objects to an array C++将对象分配给数组 C++
【发布时间】:2019-11-24 20:55:39
【问题描述】:

我对 c++ 很陌生,上周一直在努力完成部分作业。

我知道这是一件简单的事情,但我无法找到正确的方法。

我需要为我创建的类(Employee)创建四个对象,并将它们分配给我创建的数组

这是我的默认构造函数:

Employee() // Deafault Constructor 
    {
        empNumber = 00000;
        hours, payRate = 0;
        name = "Name";
    }

我尝试创建 4 个对象,并将不同的数据保存到数组元素中:

int Employees[4];
    Employees[0] = Employee(67258, 40, 35, "Craig");
    Employees[1] = Employee(25387, 30, 20, "Carol");
    Employees[2] = Employee(11945, 38, 30, "Suzie");
    Employees[3] = Employee(90832, 28, 40, "Sam");

就像我说的,基本上是全新的,我一直在谷歌搜索风暴无济于事。

欢迎任何帮助或建议甚至链接!

这是我的全部代码:

class Employee
{
private:

    int empNumber;
    string name;
    double hours, payRate;

public:

    Employee() // Deafault Constructor 
    {
        empNumber = 00000;
        hours = 0;
        payRate = 0;
        name = "Name";
    }

    Employee(int e_empNumber, double e_hours, double e_payRate, string e_name) // Non-Default Constructor
    {
        empNumber = e_empNumber;
        hours = e_hours;
        payRate = e_payRate;
        name = e_name;
    }

    void getEmployeeData()
    {
        cout << "Employee #: " << empNumber << ' ';
        cout << "Name: " << name << ' ';
        cout << "Hours worked: " << hours << ' ';
        cout << "Pay Rate: " << payRate << endl;
    }

};

int main()
{
    int Employees[4];
    Employees[0] = Employee(67258, 40, 35, "Craig");
    Employees[1] = Employee(25387, 30, 20, "Carol");
    Employees[2] = Employee(11945, 38, 30, "Suzie");
    Employees[3] = Employee(90832, 28, 40, "Sam");

    system("pause");
    return 0;
}

and the errors

【问题讨论】:

  • 请注意,hours, payRate = 0; 仅将 0 分配给第二个变量,hours 仍未初始化。
  • 你能告诉我们你的代码(见minimal reproducible example)和你得到的确切错误信息吗?
  • 您有一个 int 数组,并且您正在尝试插入 Employee 类型。它们不是一回事
  • 这就是我所知道的,现在用谷歌搜索 - 哇@Amedeus,你的评论帮助很大,谢谢!

标签: c++ arrays class object


【解决方案1】:

这样做以创建和填充员工:

Employe employees[4];
    employees[0] = Employee(67258, 40, 35, "Craig");
    employees[1] = Employee(25387, 30, 20, "Carol");
    employees[2] = Employee(11945, 38, 30, "Suzie");
    employees[3] = Employee(90832, 28, 40, "Sam");

您所做的只是创建一个整数数组。 在这里你会看到如何做到这一点:

Type variable_name[size];

【讨论】:

  • 耶! Amedeus 的评论帮助我弄清楚了!也谢谢你给我看!太棒了,它让我整个星期都感到压力很大!
  • 很高兴它有帮助。请选择正确的答案。
【解决方案2】:

感谢大家的帮助!我让它符合规范!

这是我的最终代码:

#include <iostream>
using namespace std;




class Employee
{
private:

    int empNumber;
    string name;
    double hours, payRate;

public:

    Employee() // Deafault Constructor 
    {
        empNumber = 00000;
        hours = 0;
        payRate = 0;
        name = "Name";
    }

    Employee(int e_empNumber, double e_hours, double e_payRate, string e_name) // Non-Default Constructor
    {
        empNumber = e_empNumber;
        hours = e_hours;
        payRate = e_payRate;
        name = e_name;

        void getEmployeeData();
        {
            cout << "Employee #: " << empNumber << " - ";
            cout << "Name: " << name << " - ";
            cout << "Hours worked: " << hours << " - ";
            cout << "Pay Rate: " << payRate << endl;
        }
    }



};

int main()
{
    Employee Employees[4];
    Employees[0] = Employee(67258, 40, 35, "Craig");
    Employees[1] = Employee(25387, 30, 20, "Carol");
    Employees[2] = Employee(11945, 38, 30, "Suzie");
    Employees[3] = Employee(90832, 28, 40, "Sam");

    for (int i = 0; i < 3; i++)
    {

        void getEmployeeData();
    }

    system("pause");
    return 0;
}

这将计算出存储在数组中的员工数据

【讨论】:

  • 非常小的建议:类名正确:Employee,但建议使用以小写开头的变量名Employees:employees。这些小东西将帮助您区分类型名称和变量。
【解决方案3】:

只是想增加一点洞察力。

当你这样称呼时:

Employee Employees[4];

将调用默认的ctor 来初始化数组。因此自动创建了四个对象。然后当你做作业时:

Employees[0] = Employee(67258, 40, 35, "Craig");
Employees[1] = Employee(25387, 30, 20, "Carol");
Employees[2] = Employee(11945, 38, 30, "Suzie");
Employees[3] = Employee(90832, 28, 40, "Sam");

使用参数化的ctor 创建了四个新对象,这将替换最初创建的四个。所以原来的没用(因为它们从未使用过),只是为了浪费而制造的。

您可以通过添加以下内容来验证我所说的:

默认ctor

cout << "default ctor" << endl;

参数化ctor

cout << "parameterized ctor" << endl; 

如果你想避免对象的多重构造,你可以这样:

Employee Employees[4] = {
  Employee(67258, 40, 35, "Craig"),
  Employee(25387, 30, 20, "Carol"),
  Employee(11945, 38, 30, "Suzie"),
  Employee(90832, 28, 40, "Sam")
};

这不会调用默认的ctor,只会构造四个Employee 对象。

或者,您可以使用std::vector (#include &lt;vector&gt;),它为您提供了大小的灵活性,并且如果您使用push_back 函数,则不使用默认的ctor

【讨论】:

    猜你喜欢
    • 2017-12-10
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多