对象层次结构员工程序 - 取消引用 cout 的指针
Object Hierarchy employee program - dereferencing pointer for cout
我是 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
类,然后将其分配给一个HourlyEmployee
和SalariedEmployee
,因为这些是多态性的原理。希望我对您有所帮助,如果您有任何问题,请随时提问。
'
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 编译C++时未定义的引用
- 有没有办法在不使用命名空间 std 或前缀 std:: 的情况下引用 cout?
- 为什么取消引用的指针指向指针的 std::cout 会导致 -fsanitize=地址投诉?
- 引用 std::cout 会导致段错误
- 使用cout,如何将char转换为变量的地址/引用(?)
- 在更改文件描述符 1 以引用其他文件后,我应该如何管理 ::std::cout?
- 对象层次结构员工程序 - 取消引用 cout 的指针
- 重载cout时未定义引用
- c++ cout给出带解引用指针的unexpected
- 操作符重载- cout和cin——ostream函数,不能被引用——它是一个已删除的函数
- 如何更改c++输出流以引用cout ?
- C++ SegFault 在取消引用 cout 的指针时
- 不断收到"错误:使用未声明的标识符'cout'和错误:无法解析对重载函数的引用
- 将cout引用到一个变量位置(文件或cmd)