【发布时间】:2015-12-20 23:00:17
【问题描述】:
我想创建一个Animal 接口。 Cat 类实现了它。一只动物可以吃另一只动物eat(Animal a)。 Animal.die() 会杀死动物,Animal.isDead() 返回,如果动物死了,或者没有。
如果我想编译它,我会得到一些错误:
templates may not be 'virtual'
invalid use of incomplete type 'class A'
expected class-name before '{' token
我已经搜索了很多,如何解决这个错误。但他们都没有解决它。我不是C++ 专家。我只有几年的 JAVA 经验。
代码:
#include <iostream>
using namespace std;
//interface
class Animal {
public:
template<class A extends Animal>
virtual void eat(A* a) = 0;
virtual void die() = 0;
virtual bool isDead() = 0;
};
// Cat class
class Cat: Animal {
private:
bool dead = false;
public:
Cat();
Cat(const Cat& orig);
virtual ~Cat();
template<class A extends Animal>
void eat(A* a);
void die();
bool isDead();
};
// Implement cat
Cat::Cat() {
}
Cat::Cat(const Cat& orig) {
}
Cat::~Cat() {
}
template<class A extends Animal>
void Cat::eat(A* a) {
a->die();
}
void Cat::die() {
dead = true;
}
bool Cat::isDead() {
return dead;
}
int main(int argc, char** argv) {
Cat* cat = new Cat();
Cat* cat2 = new Cat();
cat->eat(cat2);
cout << (cat2->isDead()? "Cat2 is dead" : "Cat2 is not dead") << endl;
return 0;
}
【问题讨论】:
-
请查阅 C++ 基础书籍。
-
看起来你在猜。你不能那样学习
C++。我建议通过一本好书有条不紊地工作:stackoverflow.com/questions/388242/… -
虽然在思考 C++ 的同时尝试编写 Java 是一个坏主意,但在思考 Java 的同时尝试编写 C++ 也是一个坏主意。许多设计良好的 C++ 程序与 Java 典型的几乎纯 OO 方法相去甚远。
-
Implement java like interface in C++嗯...没有。 -
我不想用 JAVA 风格编写 C++ 代码。我只是想弄清楚,如何在 C++ 中解决同样的问题
标签: c++ class templates interface