一:多态性
在这里插入代码片二:纯虚函数
#include "pch.h" #include <iostream> using namespace std; class human { public: void fun() { } virtual void eat() = 0; //虚函数声明后面加上=0就成为了一个纯虚函数 /*纯虚函数,没有函数实体, 因为有纯虚函数的存在,所以human类成了一个 抽象类,纯虚函数,也就是说在基类中,只给出函数的声明,而具体的 函数实现部分交给子类去做。 */ }; class man :public human { public: void eat() { cout << "面食" << endl; }; }; class woman :public human { public: void eat() { cout << "米饭" << endl; }; //错误 }; int main() { //human phuman; //因为是一个抽象类,所以不能定义对象。 return 0; }三:虚析构(基类的析构函数一般写成虚函数)
#include "pch.h" #include <iostream> using namespace std; class human { public: void fun() { } virtual void eat() { } human() { cout << "human()" << endl; } ~human() { cout << "~human()" << endl; } }; class man :public human { public: void eat() { cout << "面食" << endl; }; man() { cout << "man()" << endl; } ~man() { cout << "~man()" << endl; } }; class woman :public human { public: void eat() { cout << "米饭" << endl; }; woman() { cout << "woman()" << endl; } ~woman() { cout << "~woman()" << endl; } }; int main() { human *phuman = new man; delete phuman; //并没有调用man的析构函数,会造成内存泄漏, /*那怎么办?可以把基类的析构函数写成虚析构函数就可以了, virtual ~human() { cout << "~human()" << endl; }*/ //即使父类和子类的析构函数不同名,但是虚函数的性质还是会影响到子类当中,即动态绑定。 return 0; }可参考:https://blog.csdn.net/Hackbuteer1/article/details/7558868