我有两个扩展父类的类。我想写一个函数,可以接受任何一个类,但调用子函数。
即:
class employee
{
public:
employee();
virtual ~employee();
int wage;
int hours;
virtual int calculatePay() =0;
};
class factoryWorker : public employee
{
public:
factoryWorker();
int calculatePay();
};
class manager : public employee
{
public:
manager();
int calculatePay();
};
在main.cpp文件中我有一个函数
int getPay(employee anyTypeOfWorker) {
return anyTypeOfWorker.calculatePay();
}
但是这个函数总是调用父(employee)calculatePay()函数而不是覆盖函数。
感谢。
答案 0 :(得分:1)
通过地址传递。
int getPay(employee* anyTypeOfWorker) {
return anyTypeOfWorker->calculatePay();
}
答案 1 :(得分:1)
如果参数是引用或指向基类的指针,则它可以工作。
int getPay(employee& anyTypeOfWorker) {
return anyTypeOfWorker.calculatePay();
}
如果按值传递,则参数将“切片”为声明的参数类型。
答案 2 :(得分:1)
好吧,你实际上无法调用employee::calculatePay()
,因为它是纯虚拟的,但你的代码尝试的原因是对象被“切成”到{{1在将其复制到employee
的堆栈帧的过程中。
您需要传递指针或引用,以便getPay()
可以访问调用方的实际getPay()
或factoryworker
对象。例如:
manager
答案 3 :(得分:0)
您需要传入指向“anyTypeOfWorker”的指针,因此它将是
int getPay(employee* anyTypeOfWorker) {
return anyTypeOfWorker->calculatePay();
}
有关原因的参考,请查看以下内容