一个函数,它接受两个子类中的一个并在它们上调用相同的函数

时间:2012-01-23 16:48:22

标签: c++ class inheritance object

我有两个扩展父类的类。我想写一个函数,可以接受任何一个类,但调用子函数。

即:

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()函数而不是覆盖函数。

感谢。

4 个答案:

答案 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();
}

有关原因的参考,请查看以下内容

http://en.wikipedia.org/wiki/Virtual_function

http://www.cplusplus.com/forum/beginner/13885/