目录
-
虚函数
virtual int func() { //do something; return 0; }
-
纯虚函数
virtual int func() = 0;
-
抽象类
class virt_class { public: virtual int func() = 0; ... }
- 不可以实例化对象;
- 类中含有纯虚函数;
- 如果有子类继承的父类为抽象类,则子类必须重写父类的纯虚函数;
-
实例参考代码
#include <iostream> using namespace std; class calculator { public: void setv1(int v1) { this->val1 = v1; } void setv2(int v2) { this->val2 = v2; } int getres(string oper) { if ("+" == oper) { return val1 + val2; } else if ("-" == oper) { return val1 - val2; } else if ("*" == oper) { return val1 * val2; } else if ("/" == oper) { return val1 / val2; } } private: int val1; int val2; }; //多态的实现 class abstractclac { public: //虚函数 virtual int getres() { return 0; }; //纯虚函数 //如果子类继承的父类有纯虚函数,则子类必须实现改纯虚函数 //如果类中有纯虚函数,则这个类无法实例化这个类的对象 //这个类成为抽象类 virtual int getres() = 0; void setv1(int v1) { this->val1 = v1; } void setv2(int v2) { this->val2 = v2; } int getv1() { return val1; } int getv2() { return val2; } private: int val1; int val2; }; //加法的实现 class add :public abstractclac { public: int getres() { return getv1() + getv2(); } }; class subtract : public abstractclac { public: int getres() { return getv1() - getv2(); } }; class mut : public abstractclac { public: int getres() { return getv1() * getv2(); } }; void test() { abstractclac *calc1 = new add; abstractclac *calc2 = new mut; calc1->setv1(10); calc1->setv2(20); calc2->setv1(30); calc2->setv2(40); cout << calc1->getres() << endl; cout << calc2->getres() << endl; } int main() { test(); system("pause"); return 0; }