纯虚函数,抽象类
Posted qifeng1024
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了纯虚函数,抽象类相关的知识,希望对你有一定的参考价值。
什么是纯虚函数?
纯虚函数的声明有着特殊的语法格式:virtual 返回值类型成员函数名(参数表)=0;
请注意,纯虚函数应该只有声明,没有具体的定义,即使给出了纯虚函数的定义也会被编译器忽略。
什么是抽象类?
包含纯虚函数的类就是抽象类。
在C++中,我们可以把只能用于被继承而不能直接创建对象的类设置为抽象类(Abstract Class)。
抽象类中至少存在一个纯虚函数;存在纯虚函数的类一定是抽象类。存在纯虚函数是成为抽象类的充要条件。
抽象类作为基类只是用来继承,其功能在派生类中实现。
那么我们仿照这个格式定义一个包含有虚函数的抽象类
class Calculate { private: /* data */ public: Calculate(/* args */); ~Calculate(); virtual float result() = 0; float A; float B; }; Calculate::Calculate(/* args */) { } Calculate::~Calculate() { }
纯虚函数也不需要在基类中实现。
现在我们定义几个子类,同时在子类里面实现刚才纯虚函数result()的功能
class Add:public Calculate { private: /* data */ public: float result(); }; float Add::result() { return A+B; } class Sub:public Calculate { private: /* data */ public: float result(); }; float Sub::result() { return A-B; } class Multiply:public Calculate { private: /* data */ public: float result(); }; float Multiply::result() { return A*B; } class Div:public Calculate { private: /* data */ public: float result(); }; float Div::result() { return A/B; }
在主函数中调用
int main(int argc, char const *argv[]) { Add jisuan1; jisuan1.A = 10; jisuan1.B = 2; cout<<jisuan1.result()<<endl; Sub jisuan2; jisuan2.A = 10; jisuan2.B = 2; cout<<jisuan2.result()<<endl; Multiply jisuan3; jisuan3.A = 10; jisuan3.B = 2; cout<<jisuan3.result()<<endl; }
输出结果如下
12 8 20
以上是关于纯虚函数,抽象类的主要内容,如果未能解决你的问题,请参考以下文章