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

相关推荐
cany100013 小时前
C++ -- 可变参数模板
c++
不会C语言的男孩15 小时前
C++ Primer 第2章:变量和基本类型
开发语言·c++
sulikey15 小时前
个人Linux操作系统学习笔记6 - 操作系统与进程初识
linux·笔记·学习·操作系统·进程
unicorn3116 小时前
学习学习学习
学习
云泽80816 小时前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法
XGeFei16 小时前
【Fastapi学习笔记(3)】——资源的层级关系、安全性-幂等性、Field、工厂函数
笔记·学习·fastapi
Tri_Function16 小时前
简单图论大学习
c++
lqqjuly17 小时前
C++ 完整知识体系—从基础语法到现代 C++23 的系统性总结
c++·c++23
王老师青少年编程17 小时前
信奥赛C++提高组csp-s之FHQ Treap
c++·csp·平衡树·信奥赛·csp-s·提高组·fhq treap
星恒随风17 小时前
Python 基础语法详解(一):从表达式、变量到数据类型
开发语言·笔记·python·学习