【发布时间】:2015-08-07 02:25:03
【问题描述】:
我在处理以下代码中的继承问题时遇到了问题:
class Animal{
public:
Animal(int age);
~Animal();
virtual void print(); // problem here
};
class cat : public Animal
{
public:
cat(int age);
~cat();
virtual void print();
};
cat::cat(int age) : Animal(age){}
cat::~cat(){}
void cat::print(){
std::cout<<"I'm a cat "<<"My age is"<<this->getAge()<<std::endl;
}
int main (){
farm f;
cat c(3);
dog d(4);
f.add(c);
f.add(d);
c.print();
f.print();
std::cout<<f.getNa()<<std::endl;
return 0;
}
farm::farm(){
this->na=0;
}
void farm::add(Animal& a){
if(this->na<10){
this->ferme.push_back(a);
this->na+=(*this).na;
}
else std::cout<<"la ferme est pleine"<<std::endl;
}
farm::~farm(){}
void farm::remove(){
this->ferme.pop_back();
}
int farm::getNa(){
return this->na;
}
void farm::print(){
for(std::vector<Animal>::iterator it = this->ferme.begin();it !=this- >ferme.end();++it){
std::cout<<"test"<<std::endl;
it->print();
}
}
当我将print 更改为virtual void print()=0 以拥有纯虚函数时,我遇到了几个编译问题。而当我在Animal 中定义虚函数时,不再考虑cat 的打印函数。
是的 cat::print() 已定义
这里举个例子
这里有几个其他错误 错误: 分配抽象类类型“动物”的对象 ::new ((void*)__p) _Tp(__a0); 对不起,我是新来的
【问题讨论】:
-
cat::print() 定义了吗?
-
如果您能具体说明在 print() 纯虚拟时遇到的错误,这将有所帮助。
-
我编辑了我的帖子我是新手^^'
-
你给 dog 添加了 print() 吗?
标签: c++ inheritance virtual