C++核心特性:继承派生、虚函数与模板深度解析

一只小鹿
一只小鹿
发布时间:2026-10-15| 2人浏览过
原创

C++多态与泛型编程是构建高效软件的基础。本文系统梳理继承与派生的关系及其访问控制,讲解如何利用虚函数实现动态绑定以解决同名函数遮蔽问题,并分析模板在提高代码复用性方面的实践应用。

继承与派生

继承(Inheritance)指一个类获取另一个类的成员变量和函数,被继承的称为父类或基类,继承的称为子类或派生类。两者视角不同,实质相同。C++支持多继承,使用 : 符号连接基类。

第1步:定义继承与访问修饰符

派生声明语法为 class 派生类名: [继承方式] 基类名 { ... }。默认继承方式为私有(private)。不同的继承方式决定了外部对象对基类成员的访问权限:

  • public 派生:基类公有成员保持公有,保护成员保持保护。
    class Child : public Parent { ... };
  • protected 派生:基类公有和保护成员均变为派生类的保护成员。
    class Child : protected Parent { ... };
  • private 派生:基类公有和保护成员均变为派生类的私有成员。
    class Child : private Parent { ... };

对于外部调用者:
- Public 继承下,可访问派生类暴露的基类公有成员。
- Private/Protected 继承下,外部无法通过派生类对象访问基类的公有属性。

虚函数与多态

若基类与派生类拥有同名函数,无论参数是否相同,派生类都会遮蔽基类的所有同名函数,而非构成重载。默认情况下,指针或引用指向基类时,调用的是基类的版本。

第2步:利用虚函数实现动态绑定

为了实现“子类对象赋值给基类指针时调用子类方法”,需将基类对应函数声明为 virtual。关键原则如下:

  • 纯虚函数与抽象类:形如 virtual void func() = 0; 的函数无函数体。包含纯虚函数的类为抽象类,不可实例化,必须由派生类实现后创建对象。
  • 虚析构函数:基类析构函数必须声明为虚函数。否则通过基类指针删除派生类对象时,仅触发基类析构,导致内存泄漏。
  • override 关键字:用于显式标识派生类覆盖虚函数,增强代码安全性。
#include <iostream>
using namespace std;
class Person {
public:
    virtual void look() { cout << "virtual look" << endl; }
    virtual ~Person() { cout << "~Person" << endl; }
};
class Child : public Person {
public:
    void look() override {
        cout << "child look" << endl;
        Person::look();
    }
    ~Child() { cout << "~Child" << endl; }
};
int main() {
    Person* p = new Child();
    p->look(); // 输出 child look 和 virtual look
    delete p; // 安全释放
}

内存结构上,含有虚函数的类包含虚函数表指针 vtable(通常占8字节),存放实际执行方法的地址。

模板技术

模板允许定义通用的函数或类,编译器在编译时进行实例化。因此,**声明(.h)与实现(.cpp)不能分离**,所有定义必须在头文件中,否则链接器找不到实例。

第3步:构建通用数据结构

类模板中,内部操作无需像 Java 一样限制泛型边界,直接调用类型提供的接口即可(但可能引发编译错误)。

// 泛型数组模拟
template<typename T>
class ArrayList {
int size, realSize{};
T* arr;
public:
void add(T val) { /* 扩容与追加逻辑 */ }
T get(int index) { /* 读取逻辑 */ }
};

第4步:处理字符串转换

C++ string 对象位于堆区,可直接增删改。若需与 C 标准库交互,应使用 c_str() 获取常量指针,并通过 strcpy 复制到缓冲区,防止对象析构后悬垂。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。