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

相关推荐
外收内放8 分钟前
数据分析(jupyter与pandas初体验)
python·学习
zhangrelay19 分钟前
《机器人控制器设计与编程》课程习题资料-2026
linux·笔记·学习·ubuntu
志尊宝27 分钟前
Vue3 零基础每日笔记(055):组件里正确使用 store——storeToRefs 解构与 $patch 批量修改
笔记·vue·html·前端开发·软件开发
程序员AlbertTu39 分钟前
# Mantissa 使用教程 — Python 版与 C++ 版
c++·python·数值运算
kkkkkkkkkk_Z42 分钟前
新手自学嵌入式|学习日记:从C语言到51单片机基础(GPIO、中断、定时器与PWM篇)
linux·笔记·学习·51单片机
陈年老古董1 小时前
微博情感分析项目学习笔记
笔记·python·学习·机器学习·项目
2601_960631231 小时前
如何用公开数据接口查询制药企业资质信息
笔记
小刘在重生~1 小时前
Oracle_day2 单行函数|组函数|分组|伪列|子查询|分页|多表连接
笔记·oracle·面试
Lazionr1 小时前
多态:从多种形态到运行时绑定
开发语言·c++
老当益壮梁奶奶1 小时前
ARM汇编学习笔记(六):【i.MX6ULL】时钟系统与定时器(EPIT & GPT)
c语言·arm开发·嵌入式硬件·学习·51单片机