纯虚函数,抽象类

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

 

以上是关于纯虚函数,抽象类的主要内容,如果未能解决你的问题,请参考以下文章

C++ 纯虚函数和抽象类

局部抽象类的纯虚析构函数

纯虚函数,抽象类

抽象类,虚函数,纯虚函数的意义

多态—— 纯虚函数和抽象类

纯虚函数和抽象类