C++学习笔记——枚举、继承、虚函数、可见性

一、枚举

cpp 复制代码
enum Color { RED, GREEN, BLUE };
Color c = RED;
  • 枚举值默认从 0 开始递增。

  • 枚举值会暴露在所属作用域中,容易造成命名冲突。

二、继承

cpp 复制代码
class Base { ... };
class Derived : public Base { ... };   // 继承方式:public/protected/private

继承方式对成员访问的影响

继承方式 基类 public 成员 基类 protected 成员 基类 private 成员
public public protected 不可直接访问
protected protected protected 不可直接访问
private private private 不可直接访问

构造与析构顺序

  • 构造:先调用基类构造函数,再调用派生类构造函数。

  • 析构:先调用派生类析构函数,再调用基类析构函数。

  • 基类析构函数通常应声明为 virtual,以便通过基类指针正确析构派生类对象。

三、虚函数

虚函数(Virtual Function)

用于实现运行时多态,允许通过基类指针或引用调用派生类重写的方法。

cpp 复制代码
class Animal {
public:
    virtual void speak() { cout << "Animal speaks\n"; }
};

class Dog : public Animal {
public:
    void speak() override { cout << "Dog barks\n"; }  // override 可选但推荐
};
  • 基类中声明 virtual,派生类中可重写(override 关键字显式标记)。

  • 虚函数通过虚表(vtable) 实现,每个含有虚函数的类都有一个虚表指针(vptr)。

  • 虚函数有默认实现,子类可选择覆盖。

纯虚函数(Pure Virtual Function)

用于定义抽象基类,没有默认实现,强制派生类必须实现(除非派生类也是抽象类)。

cpp 复制代码
class Shape {
public:
    virtual void draw() = 0;   // 纯虚函数
};

class Circle : public Shape {
public:
    void draw() override { cout << "Draw circle\n"; }
};
  • 含有纯虚函数的类称为抽象类,不能实例化。

虚函数使用注意事项

  • 构造函数不能是虚函数。

  • 静态成员函数不能是虚函数。

  • 基类析构函数应声明为 virtual,否则通过基类指针删除派生类对象时可能导致未定义行为(只调用基类析构,不调用派生类析构)。

四、可见性

修饰符 类内访问 派生类内访问 外部(对象)访问
public ✅ ✅ ✅
protected ✅ ✅ ❌
private ✅ ❌ ❌
  • public 继承 :基类的 public → public,protected → protected。

  • protected 继承 :基类的 public/protected → protected。

  • private 继承 :基类的 public/protected → private。

相关推荐
Peregrine91 小时前
C++ - > 类和对象
java·c++·算法
一条泥憨鱼1 小时前
【从0开始学习计算机网络】| ARP 协议:地址解析,ARP 欺骗,链路层寻址
网络·后端·学习·计算机网络
HY小宝F2 小时前
树莓派智能摄像头系统 30 天重学计划之 Day 04 · HTTP / API:控制链入口 —— 学习总结
网络协议·学习·http
Go Work2 小时前
2026 Cadence SPB 24.1中文版安装图文详解(附安装包)
经验分享·笔记
ACP广源盛139246256732 小时前
HDMI2.0 转 DP1.4 桥接方案评估:国产 GSV2125C@ACP 芯片选型笔记
笔记·硬件架构·hdmi·type-c·国产芯片
龙仔7253 小时前
RustDesk 自建服务器 Key 强校验配置笔记
运维·服务器·笔记
‎ദ്ദിᵔ.˛.ᵔ₎3 小时前
c++11:fuction包装器
开发语言·c++
悟乙己3 小时前
AFAC2026 赛题四金融长文本 Agent竞赛学习笔记:赛题解析(一)
笔记·学习·金融
霍霍的袁3 小时前
【C++】哈希表实现指南:从原理到开放定址法、链地址法的实现
c++·学习·哈希算法·散列表·visual studio
PC2005-cloud4 小时前
MySQL学习笔记:GTID 主从复制,从原理到实践,告别传统 Binlog+Position 的痛点
笔记·学习·mysql