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 继承 :基类的 publicpublicprotectedprotected

  • protected 继承 :基类的 public/protectedprotected

  • private 继承 :基类的 public/protectedprivate

相关推荐
比昨天多敲两行2 小时前
C++ AVL树
开发语言·c++
小糯米6012 小时前
C++ 并查集
java·c++·算法
Heartache boy3 小时前
野火STM32_HAL库版课程笔记-TIM通道捕获应用之编码器模式
笔记·stm32·单片机·嵌入式硬件
楚Y6同学3 小时前
QT C++ 实现图像查看器
开发语言·c++·qt·图像查看
老虎06273 小时前
LeetCode热题100 刷题笔记(第四天)二分 「 寻找两个正序数组的中位数」
笔记·算法·leetcode
郝学胜-神的一滴3 小时前
Qt6 + OpenGL 3.3 渲染环境搭建全指南:从空白窗口到专属渲染画布的优雅实现
数据结构·c++·线性代数·算法·系统架构·图形渲染
llm大模型算法工程师weng3 小时前
在flomo中安放“不确定”:一款笔记产品如何让人“被看见”
笔记
报错小能手3 小时前
ios开发方向——对于实习开发的app(Robopocket)讲解
开发语言·学习·ios·swift
样例过了就是过了3 小时前
LeetCode热题100 最小栈
数据结构·c++·算法·leetcode