我有抽象类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)
有什么想法吗?
谢谢!
答案 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
...
}
};