注意:
虚函数在面向对象整个过程都非常重要!!!,虽然会带来内存以及性能上的损耗,但相对来说微乎其微
虚函数允许我们在子类中重写方法!!
举例:
子类可向父类转,但是建议不要反着来,容易出问题
#include<iostream>
#include<cstring>
using namespace std;
class Entity {
public:
string GetName() { return "Entity"; }
};
class Player :public Entity {
private:
string m_Name;
public:
Player(const string& name):m_Name(name){}
string GetName() { return m_Name; }
};
void PrintName(Entity* c) {
cout << c->GetName() << endl;
}
int main() {
Entity* e = new Entity();
PrintName(e);
Player* p = new Player("Cherno");
PrintName(p);
}
结果:
我们会发现结果一样
解释:
因为函数在类内部起作用,在调用时,我们通常会调用属于该类型的函数(方法)!!!
这就用到虚函数virtual,有一种动态联编实现,用于子类对父类的方法重写
演示:
#include<iostream>
#include<cstring>
using namespace std;
class Entity {
public:
virtual string GetName() { return "Entity"; }
};
class Player :public Entity {
private:
string m_Name;
public:
Player(const string& name):m_Name(name){}
string GetName() override { return m_Name; }//c++11之后新加的一种,用于检查virtual语法上是否有错
};
void PrintName(Entity* c) {
cout << c->GetName() << endl;
}
int main() {
Entity* e = new Entity();
PrintName(e);
Player* p = new Player("Cherno");
PrintName(p);
}
结果:
版权声明:本文为weixin_66405733原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。