C++——纯虚函数、抽象类

纯虚函数与抽象类 9

1. 纯虚函数:

  • 可以没有函数体的虚函数。
  • 格式:virtual 返回类型 函数名(参数列表) = 0;
  • 作用:将派生类强制实现该函数。

代码示例 1 (无纯虚函数):

c++ 复制代码
class Animal {
public:
    virtual void speak() { std::cout << "Animal speaking..." << std::endl; }
};

class Dog : public Animal {
public:
    // 可以选择不实现 speak() 函数,将继承基类的实现
};

int main() {
    Dog dog;
    dog.speak(); // 输出: Animal speaking...
    return 0;
}

代码示例 2 (有纯虚函数):

c++ 复制代码
class Animal {
public:
    virtual void speak() = 0; // 纯虚函数
};

class Dog : public Animal {
public:
    void speak() override { std::cout << "Woof!" << std::endl; } // 必须实现 speak()
};

int main() {
    Dog dog;
    dog.speak(); // 输出: Woof!
    return 0;
}

2. 抽象类:

  • 包含至少一个纯虚函数的类称为抽象类,也叫做纯虚类。
  • 抽象类不能实例化,即不能创建该类的对象。
  • 抽象类主要用于定义接口,规范派生类的行为。
  • 很多编程语言中的抽象类也叫接口类。

关于"虚"的概念:

  • 虚继承: 解决菱形继承问题,避免数据冗余和二义性。
  • 虚基类: 在虚继承中,被继承的公共基类称为虚基类。
  • 虚函数: 使用 virtual 关键字声明的成员函数,允许在运行时动态绑定(多态)。
  • 纯虚函数: 没有函数体的虚函数,使用 = 0 声明。
  • 纯虚类/抽象类: 包含至少一个纯虚函数的类。

代码示例:

c++ 复制代码
class Shape {
public:
    virtual double getArea() = 0; // 纯虚函数
};

class Circle : public Shape {
private:
    double radius;
public:
    Circle(double r) : radius(r) {}
    double getArea() override { return 3.14159 * radius * radius; }
};

int main() {
    //Shape shape; // 错误: 不能实例化抽象类
    Circle circle(5);
    std::cout << "Circle area: " << circle.getArea() << std::endl;
    return 0;
}
相关推荐
夜微凉47 分钟前
MySQL 事务 ACID
后端
狼爷27 分钟前
百万QPS多场次秒杀系统架构全解:解耦设计、防超卖、流量防护体系
后端·架构
ruxingli1 小时前
Golang iota详解
开发语言·后端·golang
前端环境观察室2 小时前
别只看 task success:AI Agent 浏览器自动化真正要补的是环境证据链
前端·后端
浩风祭月2 小时前
把 Docker 镜像从 2GB 瘦身到 180MB,AI 帮我找到了那些看不见的“脂肪”
后端·ai编程
暗冰ཏོ3 小时前
Go 语言从入门到后端项目实战完整指南
开发语言·后端·golang·go·go语言
霸道流氓气质3 小时前
Windows批处理脚本完整指南:可移植的交互式SpringBoot项目管理
windows·spring boot·后端
小杍随笔3 小时前
【Rust 工具链管理完全指南:rustup toolchain 命令实战详解】
开发语言·后端·rust
还是鼠鼠3 小时前
AI掘金头条新闻系统 (Toutiao News)-获取用户信息
后端·python·mysql·fastapi·web
BingoGo4 小时前
免费可商用 PHP 管理后台 CatchAdmin V5.3.1 发布 后台打包直降 5s 内
后端·php