我有一個繼承問題在下面的代碼處理中的問題:C++繼承虛擬純函數
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
的打印函數。 分配抽象類類型的「動物」 ::新的((無效*)__ P)_TP的對象: 是貓:: print()函數在這裏一個 錯誤幾個其他錯誤中定義 下面的例子
(__a0); 對不起,我這裏是新的
的是()定義貓::打印? – simon
[無法重現](https://ideone.com/nrUscs)[無論是哪種情況](https://ideone.com/q5bFVM)。請始終提供[MCVE](http://stackoverflow.com/help/mcve)。 –
如果您具體瞭解您在製作print()純虛擬時出現的錯誤,將會有所幫助。 – drescherjm