如何覆盖派生 class 中的虚函数?
How can I override a virtual function in a derived class?
我正在尝试建立一个用于练习 c++ 和 oop 的动物园。我做了2个classes,Animalclass(基础class)和Bearclass(派生class)。我想在 Animal 中有 2 个虚拟函数,我将在 Bear 中覆盖它们,但 CLION 告诉我 'Function Walk did not decleared in class Bear'.
我需要更改什么?
这是基础class(动物)header:
class Animal {
public:
Animal();
Animal(string Name, int CageNum, string FoodType, string Gender, bool NeedTreatment);
virtual void Talk() = 0;
virtual void Walk();
int CageNum;
string FoodType;
string Gender;
bool NeedTreatment;
string Name;
};
CPP:
Animal::Animal() {};
Animal::Animal(string Name, int CageNum, string FoodType, string Gender, bool NeedTreatment) :
Name(Name), CageNum(CageNum), FoodType(FoodType), Gender(Gender), NeedTreatment(NeedTreatment){};
这是派生class(熊)header:
#include "Animal.h"
class Bear : public Animal{
protected:
string FurColor;
public:
Bear(string Name, int CageNum, string FoodType, string Gender, bool NeedTreatment,string FurColor);
};
这是菲律宾共产党:
#include "Bear.h"
Bear::Bear(string Name, int CageNum, string FoodType, string Gender, bool NeedTreatment,string FurColor) :
Animal(Name, CageNum, FoodType, Gender, NeedTreatment),FurColor(FurColor) {};
void Bear::Walk() {
cout << "Bear Moves";
}
void Animal::Talk() {
"Bear Noise";
}
如果你定义一个像
这样的函数
void Bear::Walk() {
cout << "Bear Moves";
}
它的声明必须出现在class定义中:
class Bear : public Animal{
protected:
string FurColor;
public:
Bear(string Name, int CageNum, string FoodType, string Gender, bool NeedTreatment,string FurColor);
void Walk() override; // <<<<<<<<<<<<<<<<<<
};
或者您可以省略定义,将使用基础 class 成员定义 Animal::Walk()
。
还有
void Animal::Talk() {
"Bear Noise";
}
是错误的(或最终没有按预期进行)。
像 Talk()
那样的纯虚函数,来自基础 class,必须在 Bear
class 中有一个声明和定义,除非 class故意留下抽象。
class Bear : public Animal{
protected:
string FurColor;
public:
Bear(string Name, int CageNum, string FoodType, string Gender, bool NeedTreatment,string FurColor);
void Talk() override; // <<<<<<<<<<<<<<<<<<
void Walk() override;
};
和定义
void Bear::Talk() {
"Bear Noise";
}
我正在尝试建立一个用于练习 c++ 和 oop 的动物园。我做了2个classes,Animalclass(基础class)和Bearclass(派生class)。我想在 Animal 中有 2 个虚拟函数,我将在 Bear 中覆盖它们,但 CLION 告诉我 'Function Walk did not decleared in class Bear'.
我需要更改什么?
这是基础class(动物)header:
class Animal {
public:
Animal();
Animal(string Name, int CageNum, string FoodType, string Gender, bool NeedTreatment);
virtual void Talk() = 0;
virtual void Walk();
int CageNum;
string FoodType;
string Gender;
bool NeedTreatment;
string Name;
};
CPP:
Animal::Animal() {};
Animal::Animal(string Name, int CageNum, string FoodType, string Gender, bool NeedTreatment) :
Name(Name), CageNum(CageNum), FoodType(FoodType), Gender(Gender), NeedTreatment(NeedTreatment){};
这是派生class(熊)header:
#include "Animal.h"
class Bear : public Animal{
protected:
string FurColor;
public:
Bear(string Name, int CageNum, string FoodType, string Gender, bool NeedTreatment,string FurColor);
};
这是菲律宾共产党:
#include "Bear.h"
Bear::Bear(string Name, int CageNum, string FoodType, string Gender, bool NeedTreatment,string FurColor) :
Animal(Name, CageNum, FoodType, Gender, NeedTreatment),FurColor(FurColor) {};
void Bear::Walk() {
cout << "Bear Moves";
}
void Animal::Talk() {
"Bear Noise";
}
如果你定义一个像
这样的函数void Bear::Walk() {
cout << "Bear Moves";
}
它的声明必须出现在class定义中:
class Bear : public Animal{
protected:
string FurColor;
public:
Bear(string Name, int CageNum, string FoodType, string Gender, bool NeedTreatment,string FurColor);
void Walk() override; // <<<<<<<<<<<<<<<<<<
};
或者您可以省略定义,将使用基础 class 成员定义 Animal::Walk()
。
还有
void Animal::Talk() {
"Bear Noise";
}
是错误的(或最终没有按预期进行)。
像 Talk()
那样的纯虚函数,来自基础 class,必须在 Bear
class 中有一个声明和定义,除非 class故意留下抽象。
class Bear : public Animal{
protected:
string FurColor;
public:
Bear(string Name, int CageNum, string FoodType, string Gender, bool NeedTreatment,string FurColor);
void Talk() override; // <<<<<<<<<<<<<<<<<<
void Walk() override;
};
和定义
void Bear::Talk() {
"Bear Noise";
}