zoukankan      html  css  js  c++  java
  • 纯虚函数,抽象类

    什么是纯虚函数?

    纯虚函数的声明有着特殊的语法格式: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
  • 相关阅读:
    2019.01.06-dtoj-2437: [Noi2011]兔兔与蛋蛋
    2019.01.03-bzoj-1443-[JSOI2009]游戏Game
    2019.01.03-dtoj-4104-yjqaa
    2019.01.03-sg函数模板
    2019.01.02-bzoj-4550: 小奇的博弈
    2019.01.02-dtoj2293-幻想乡开店(shop)
    OCP 071中文考试题库(cuug内部资料)第5题
    OCP 063中文考试题库(cuug内部资料)第4题
    OCP 063中文考试题库(cuug内部资料)第3题
    OCP 062中文考试题库(cuug内部资料)第4题
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/12642656.html
Copyright © 2011-2022 走看看