一類與此代碼:適當延長在C++
class Plant
{
public:
virtual std::string getPlantName();
virtual void setPlantName(std::string s);
virtual std::string getPlantType();
virtual void setPlantType(std::string s);
};
class Carrot : public Plant
{
public:
Carrot();
~Carrot();
private:
std::string _plantName;
};
然後:
#include "Carrot.hpp"
Carrot::Carrot()
{
}
Carrot::~Carrot() { }
std::string Carrot::getPlantName() { return _plantName; }
我得到一個鏈接錯誤:
Carrot.cpp:16:21: Out-of-line definition of 'getPlantName' does not match any declaration in 'Carrot'
所以這裏的目標是創建一個Plant類,其他類擴展如class Carrot : public Plant
但是,我不確定的是我可以inline
功能Plant
,以便我不必在每個類中創建這些get
和set
函數,如胡蘿蔔或豌豆等?
如果我這樣做:
inline virtual std::string getPlantName(return _plantName;);
將這項工作?然後我會添加std::string _PlantName;
到class Plant
然後當我創建Carrot
從Plant
我得到所有相同的功能和Carrot
將有像_plantName
等變量,是否正確?
因此,這將是:
class Carrot : public Plant
{
public:
Carrot();
~Carrot();
virtual std::string getPlantName();
private:
std::string _plantName;
};
或者,如果所有植物都有名字,你可以定義方法:
class Plant
{
public:
inline virtual std::string getPlantName(return _plantName;);
virtual void setPlantName(std::string s);
virtual std::string getPlantType();
virtual void setPlantType(std::string s);
private:
std::string _plantName;
};
class Carrot : public Plant
{
public:
Carrot();
~Carrot();
};
#include "Carrot.hpp"
Carrot::Carrot()
{
setPlantName(CARROT::plantName);
}
Carrot::~Carrot() { }
這正是我想要做的。所有的「植物」都有這些相同的項目(和其他我沒有包括在內),當擴展時,我想要所有這些相同的東西,並在需要的地方覆蓋。 – Jason
等等,以便在標題中內聯它將是'內聯虛擬std ....'。或者「虛擬內聯......」這個順序並沒有什麼區別(我相信),但是開發人員是否可以通過預期的方式閱讀它? – Jason
你能詳細說一下'純虛擬'嗎?你可以'純粹的虛擬內聯'那些吸氣劑和吸附劑? – Jason