我想创建一个Animal
界面。 Cat
类实现它。一只动物可以吃另一只动物eat(Animal a)
。如果动物死亡,Animal.die()
会杀死动物,并且Animal.isDead()
返回。在C++中实现类似java的界面
如果我想编译它,我得到了一些错误:
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++'。我建议通过一本好书有条不紊地工作:https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – Galik
尽管在思考的同时尝试编写Java是一个糟糕的主意在C++中,在Java中思考和尝试编写C++也是一个不好的主意。许多精心设计的C++程序远不是几乎纯粹的OO方法,这是Java的典型做法。 – cdonat