C ++无法实例化抽象类子

时间:2013-12-06 12:38:46

标签: c++ inheritance abstract-class

我有抽象类Transaction,其中包含几个常规属性和方法以及一个方法 - Behavior - 我将其设为纯虚拟,因此从Transaction继承的类可以自己实现它。

我的Transaction.h

class Transaction abstract{

protected:

...

public:

...

virtual void behavior() = 0;

};

我认为这应该是正确的。比我有班级牛,我想从交易中继承。

这就是我尝试这样做的方式

class Cow : public Transaction {

    public:
        Cow(int p, Calendar* cal){
        this->priority = p;
        this->cal = cal;
    }

    void Behavior() {

        ...

        do some stuff

        ...

    }
};

问题是,每当我尝试制作类Cow的对象时。要么是在Main.cpp中,要么在Cow :: Behavior中(基本上只需要代码中的两个位置,我需要能够创建Cow的对象)我最终会得到一个错误。

error C2259: 'Cow' : cannot instantiate abstract class

这真让我感到困惑,因为我并没有尝试实例化一个抽象类,而是继承它的类。我确信这是基本的东西,但我似乎无法自己解决这个问题。

顺便说一下。这就是我尝试创建Cow的新实例的方法。

    Calendar *calendar = new Calendar();
calendar->push(0, new Cow(1, calendar));

方法Calendar :: Push接受

void Calendar::push(int t, Transaction *tr)

有什么想法吗?

谢谢!

4 个答案:

答案 0 :(得分:1)

您已在基类中声明了纯虚函数behavior,并在派生类中声明了无关函数Behavior。这不会覆盖纯函数,因为它具有不同的名称。 C ++区分大小写。

答案 1 :(得分:0)

C ++区分大小写。你用小写字母拼写行为' b'在您的基类和派生的行为中。

答案 2 :(得分:0)

由于您没有覆盖类Cow中的纯虚函数行为[行为被视为不同的函数]因此Cow也成为一个抽象类。其余的是C ++语义。

答案 3 :(得分:0)

首先,C ++没有关键字摘要。看来你正在使用C ++ / CLI。请尝试以下定义

ref class Transaction abstract{

protected:

...

public:

...

virtual void behavior() = 0;

};

ref class Cow : public Transaction {

    public:
        Cow(int p, Calendar* cal){
        this->priority = p;
        this->cal = cal;
    }

    void behavior() override {

        ...

        do some stuff

        ...

    }
};