C++中的抽象类和纯虚函数。

在C++中,抽象类和纯虚函数是面向对象编程的两个重要概念,它们允许我们定义接口和强制派生类实现特定的行为。

抽象类(Abstract Class)

抽象类是一种特殊的类,它不能被实例化(即不能创建抽象类的对象)。抽象类主要用于定义接口,即定义一组纯虚函数,这些函数在抽象类中不实现具体的功能,而是由派生类来实现。

抽象类使用abstract关键字来声明(虽然C++标准中并没有abstract这个关键字,但通常我们称包含纯虚函数的类为抽象类)。在C++中,如果一个类至少含有一个纯虚函数,那么这个类就是抽象类。

示例:

 

cpp复制代码

class AbstractClass {
public:
// 纯虚函数,没有函数体
virtual void pureVirtualFunction() = 0;
// 其他成员函数可以是普通的或者虚函数
virtual void anotherVirtualFunction() {
// 实现一些功能
}
// 抽象类可以有数据成员
int someData;
};
// 尝试实例化抽象类会导致编译错误
// AbstractClass obj; // 错误

纯虚函数(Pure Virtual Function)

纯虚函数是在基类中声明的虚函数,它在基类中没有定义(即没有函数体),但要求任何直接或间接派生自该基类的类都必须提供该函数的定义。纯虚函数通过在函数声明的末尾添加= 0来标识。

纯虚函数的主要目的是强制派生类实现特定的行为。如果一个类包含纯虚函数,那么这个类就不能被实例化,因为它没有实现所有的函数。

示例(与上面的抽象类示例相同):

 

cpp复制代码

class AbstractClass {
public:
// 纯虚函数
virtual void pureVirtualFunction() = 0;
// ...
};

使用抽象类和纯虚函数

抽象类和纯虚函数通常用于定义接口,接口是一种只包含纯虚函数的抽象类。通过实现接口(即继承抽象类并提供纯虚函数的定义),派生类可以遵循特定的行为模式,并确保其实现满足接口的要求。

示例:

 

cpp复制代码

// 定义一个接口
class Shape {
public:
virtual void draw() = 0; // 纯虚函数,定义接口
virtual ~Shape() {} // 析构函数通常也声明为虚函数
};
// 派生类实现接口
class Circle : public Shape {
public:
void draw() override {
// 实现绘制圆形的逻辑
}
};
class Rectangle : public Shape {
public:
void draw() override {
// 实现绘制矩形的逻辑
}
};
// 使用接口
void drawShapes(std::vector<Shape*>& shapes) {
for (Shape* shape : shapes) {
shape->draw(); // 调用纯虚函数,实现多态性
}
}

在这个示例中,Shape类是一个接口,它定义了一个纯虚函数draw()CircleRectangle类都继承自Shape类,并提供了draw()函数的实现。通过drawShapes()函数,我们可以使用多态性来调用不同形状对象的draw()函数,而无需关心它们的具体类型。

  • 14
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值