C++纯虚函数 virtual =0

纯虚函数(pure virtual function)

class Screen
{
public:
    virtual void Show()=0;  // 普通的虚函数后面加上"=0"这样就声明了一个pure virtual function
};

 在什么情况下使用纯虚函数(pure vitrual function)?

  • 当想在基类中抽象出一个方法,且该基类只做能被继承,而不能被实例化;

  • 这个方法必须在派生类(derived class)中被实现;

我们定义了一个类如下:

class CShape
{
    virtual void Show(){};
};

但没有CShape这种形状,因此我们不想让CShape这个类被实例化,我们首先想到的是将Show函数的定义(实现)部分删除如下:

class CShape
{
    virtual void Show();
};

当我们使用下面的语句实例化一个CShape时:

CShape cs;  //这是我们不允许的,但仅用上面的代码是可以通过编译(但link时失败)。

我们再来看看被继承的情况,我们需要一个CPoint2D的类,它继承自CShape.他必须实现基类(CShape)中的Show()方法。

其实使用最初的本意是让每一个派生自CShape的类,都要实现Show()方法,但时常我们可能在一个派生类中忘记了实现Show(),为了避免这种情况,pure virtual funcion发挥作用了。


转载于:https://my.oschina.net/wellsoschina/blog/335112

### 关于 C++ 纯虚函数的概念及用法 #### 一、纯虚函数的定义 在 C++ 中,纯虚函数是一种特殊的成员函数,在其声明中通过 `= 0` 表明该函数没有具体的实现[^1]。这种机制允许开发者创建一个接口类(通常称为抽象类),强制派生类必须提供这些函数的具体实现。 以下是纯虚函数的基本语法: ```cpp class Base { public: virtual void pureVirtualFunction() = 0; // 纯虚函数 }; ``` #### 二、纯虚函数的作用 纯虚函数的主要作用在于定义接口规范,而不提供具体实现细节。这意味着任何继承自带有纯虚函数的基类的子类都必须覆盖并实现这个函数,否则该子类本身也会成为抽象类而无法被实例化[^4]。 #### 三、使用场景 纯虚函数广泛应用于面向对象编程中的多态性和接口设计。例如,当需要一组不同类型的对象共享相同的行为框架时,可以利用纯虚函数来规定这一行为的标准形式[^3]。 #### 四、示例代码 下面展示如何定义和使用带有一个纯虚函数的基类及其派生类: ```cpp #include <iostream> using namespace std; // 抽象基类 class Shape { public: virtual void draw() const = 0; // 纯虚函数 virtual ~Shape() {} // 虚析构函数确保正确释放资源 }; // 派生类 Circle 实现了纯虚函数 class Circle : public Shape { public: void draw() const override { cout << "Drawing a circle." << endl; } }; // 另一个派生类 Rectangle 同样实现了纯虚函数 class Rectangle : public Shape { public: void draw() const override { cout << "Drawing a rectangle." << endl; } }; int main(){ // 创建指向基类的对象指针数组 Shape* shapes[] = {new Circle(), new Rectangle()}; // 遍历调用各自的draw方法体现多态特性 for(auto shape : shapes){ shape->draw(); delete shape; } return 0; } ``` 此程序展示了通过基类指针访问不同类型派生物件的能力,并体现了动态绑定带来的灵活性[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值