强制子类实现方法,基类只提供组成,通常称之为接口
class Entity
{
public:
virtual std::string GetName() = 0 //前面加virtual
}
class Player : public Entity
{
private:
std::string m_Name;
public:
Player(const std::string& name : m_Name(name)){}
std::string GetName() override { return m_Name;} //c++11引入添加override
}
void PrintName(Entity *entity)
{
std::cout << entity->GetName() << std::endl;
}
int main()
{
Entity* e = new Entity;
PrintName(e)
Player* p = new Player("Cherno");
PrintName(p)
std::cin.get();
return 0;
}
- 纯虚函数必须被子类实现,才能创建这个类的实例。
- 因为基类只保留组成,所以无法创建实例。
当然子类也可以只声明,实现放在.cpp中实现
base.h
class Entity
{
public:
virtual std::string GetName() = 0 //前面加virtual
}
class Player : public Entity
{
private:
std::string m_Name;
public:
Player(const std::string& name : m_Name(name)){}
std::string GetName() override; //c++11引入添加override,不在这实现
}
other.cpp
#include "base.h"
std::string Player::GetName(){
return m_Name;
}
main.cpp
int main()
{
Entity* e = new Entity;
PrintName(e)
Player* p = new Player("Cherno");
PrintName(p)
std::cin.get();
return 0;
}
‵