C++纯虚函数和抽象类

本文介绍了C++中纯虚函数的概念及其应用,探讨了如何通过纯虚函数创建抽象类,并给出了具体的示例代码。此外,还讨论了多继承中的二义性问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

纯虚函数:

    形式:virtual 类型 函数名(参数列表) = 0;

一个具有纯虚函数的基类被称为抽象类。

抽象类不能用于实例化;但是可以声明抽象类的指针。

多继承的二义性。

#include <iostream>

using namespace std;

class B{
public:
    int b;
protected:
private:
};

class B1:public B{
public:
    int b1;
protected:
private:
};

class B2:public B{
public:
    int b2;
protected:
private:
};

class C:public B1, public B2{
public:
    int c;
protected:
private:
};


int main()
{
    C c;
    c.b1 = 9;
    c.b2 = 10;
    //c.b = 0;  并不确定是哪个基类的b,存在二义性
    cout << "Hello world!" << endl;
    return 0;
}

备注:在实际的开发中几乎不用多继承来解决问题。解决方案就是使用虚继承。

纯虚函数和抽象类:

纯虚函数是一个在基类中说明的虚函数,在基类中没有定义。要求任何派生类都定义自己的版本。

纯虚函数为各个派生类提供了一个界面。

纯虚函数说明形式:

        virtual 类型 函数名(参数列表)  = 0;

一个具有纯虚函数的基类称为抽象类。

抽象类不能定义对象。

示例程序:

#include <iostream>

using namespace std;

class Figure{      //函数纯虚函数的类被称为抽象类
public:
    //提供一个统一的界面(接口),让子类使用,子类必须实现
    virtual double getArea() = 0;  //抽虚函数
protected:
private:
};

class Circle:public Figure{
public:
    Circle(double r){
        this->m_r = r;
    }
    virtual double getArea(){
        cout<<"圆的面积:"<<3.14*m_r*m_r<<endl;
        return 3.14*m_r*m_r;
    }
protected:
private:
    double m_r;
};

int main()
{
    //Figure f; 抽象类不能被实例化
    Figure *base = NULL;
    Circle c(10);
    base = &c;
    base->getArea();

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值