对象层次结构员工程序 - 取消引用 cout 的指针

Object Hierarchy employee program - dereferencing pointer for cout

本文关键字:引用 cout 指针 取消 层次结构 程序 对象      更新时间:2023-10-16

我是 c++ 的新手,正在为类做一个项目。我知道我的一些功能不正确。我正在尝试达到至少可以看到输出以继续处理它的地步。我已经简要描述了我正在尝试做的事情。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
class Employee
{
protected:
    char* name[50];
public:
Employee()
{
}
Employee(char* name)
{
    strcpy(name, name);
}
char* getName()
{
    return *name;
}
void setName(char* name)
{
    name = name;
}
/*virtual ~Employee()
{
    delete[] name;
}*/
virtual void print() = 0;

};
class HourlyEmployee : public Employee
{
private:
    float HourlySalary;
public:

HourlyEmployee()
{
    HourlySalary = 0;
}
HourlyEmployee(char* name, float HourlySalary)
{
    name = name;
    HourlySalary = HourlySalary;
}
double getHourlySalary()
{
    return HourlySalary;
    //cout << "What is your Hourly Salary" << endl;
    //cin >> HourlySalary;
}
void setHourlySalary(double HourlySalary)
{
}
void print()
{
    cout << "Hourly Employee Name: " << &name << endl
        << "Salary: " << &HourlySalary << "per hour" << endl;
}
};
class SalariedEmployee : public Employee
{
private:
    float MonthlySalary;
public:
SalariedEmployee()
{
    MonthlySalary = 0;
}
SalariedEmployee(char* name, float MonthlySalary)
{
}
double getMonthlyySalary()
{
    return MonthlySalary;
    //cout << "What is your Hourly Salary" << endl;
    //cin >> MonthlySalary;
}
void setMonthlySalary(double MonthlySalary)
{
}
void print()
{
        cout << "Hourly Employee Name: " << name << endl
            << "Salary: " << MonthlySalary << "per month" << endl;
}
};
int main() {
SalariedEmployee* S = new SalariedEmployee();
SalariedEmployee S1("Joe Bob", '4500');
HourlyEmployee* H = new HourlyEmployee();
HourlyEmployee H1("Jim Bob", '20');
S1.print();
H1.print();
delete S, H;
system("pause");
return 0;
}

从你的练习描述中,我得出结论,你要求这样的东西:

#include <iostream>
using namespace std;
class Employee
{
protected:
    char name[50];
public:
    Employee()
    {
    }
    Employee(char* name)
    {
        strncpy_s(this->name, 49, name, 49);
    }
    char* getName()
    {
        return this->name;
    }
    void setName(char *name)
    {
        strncpy_s(this->name, 49, name, 49);
    }
    virtual void print() = 0;
};
class HourlyEmployee : public Employee
{
private:
    float hourlySalary;
public:

    HourlyEmployee()
    {
        hourlySalary = 0;
    }
    HourlyEmployee(char* name, float HourlySalary)
    {
        strncpy_s(this->name, 49, name, 49);
        this->hourlySalary = HourlySalary;
    }
    double getHourlySalary()
    {
        return hourlySalary;
        //cout << "What is your Hourly Salary" << endl;
        //cin >> HourlySalary;
    }
    void setHourlySalary(double HourlySalary)
    {
        this->hourlySalary = HourlySalary;
    }
    void print()
    {
        cout << "Hourly Employee Name: " << this->name << endl
            << "Salary: " << hourlySalary << " per hour" << endl;
    }
};
class SalariedEmployee : public Employee
{
private:
    float MonthlySalary;
public:
    SalariedEmployee()
    {
        MonthlySalary = 0;
    }
    SalariedEmployee(char* name, float MonthlySalary)
    {
        strncpy_s(this->name, 49, name, 49);
        this->MonthlySalary = MonthlySalary;
    }
    double getMonthlyySalary()
    {
        return MonthlySalary;
        //cout << "What is your Hourly Salary" << endl;
        //cin >> MonthlySalary;
    }
    void setMonthlySalary(double MonthlySalary)
    {
        this->MonthlySalary = MonthlySalary;
    }
    void print()
    {
        cout << "Hourly Employee Name: " << name << endl
            << "Salary: " << MonthlySalary << " per month" << endl;
    }
};
int main() 
{
    Employee * employee[2];
    employee[0] = new SalariedEmployee("Joe Bob", 4000);
    employee[1] = new HourlyEmployee("Jim Bob", 20);
    for (int i = 0; i < 2; i++)
    {
        employee[i]->print();
    }
    for (size_t i = 0; i < 2; i++)
    {
        delete employee[i];
    }
    system("pause");
    return 0;
}

首先,你的name变量必须是char[50]类型,而不是*char[50]。所以我使用 strncpy(或安全函数 strncpy_s)在我们的构造函数中复制name。由于您正在处理字符,因此您不能像在代码的某些部分那样分配它,例如name = name。我之所以使用this->name,是因为变量名称相同。接下来,在你的主函数中,你必须有Employee类,然后将其分配给一个HourlyEmployeeSalariedEmployee,因为这些是多态性的原理。希望我对您有所帮助,如果您有任何问题,请随时提问。

'