【发布时间】:2012-02-17 00:27:23
【问题描述】:
我有两个类都扩展了父类。我想写一个函数,可以接受任何一个类,但调用 childs 函数。
即:
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();
}
但是这个函数总是调用父(员工)calculatePay()函数而不是被覆盖的函数。
谢谢。
【问题讨论】:
-
您的 main.cpp 无法编译,因为
employee是抽象的。 -
注意:您不应该通过值传递
employee实例;这样你会得到object slicing。 -
我无法想象你在说什么,因为 calculatePay() 是“员工”中的纯虚拟方法。即使它具有默认实现,您也必须使用完整的限定方法名称在子类中调用它(employee::calculatePlay())
-
@Fred Larson:没有理由假设他的程序不能仅仅因为他的 getPay 签名而被编译和链接(除了在那个签名中“员工”应该通过指针传递或至少通过参考)。
-
@boto:不能按值传递,因为不能为抽象类创建值。我愿意打赌(如果我是一个赌徒,我不是)OP 的实际代码没有纯虚函数,所以切片就是正在发生的事情。
标签: c++ class inheritance object