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

相关推荐
chase。6 分钟前
【学习笔记】BifrostUMI 论文全面解析
人工智能·笔记·学习
Sylvia33.6 分钟前
足球数据API接入实战:从认证到实时比分推送的完整指南
java·开发语言·前端·c++·python
_小郑有点困了11 分钟前
学习Python基础语法及使用
前端·python·学习
Chloeis Syntax12 分钟前
JavaEE初阶学习日记(1)---线程和进程
java·开发语言·学习·线程·javaee
时空自由民.26 分钟前
C/C++ volatile关键字原理及应用介绍
java·c语言·c++
我头发还没掉光~28 分钟前
P4147 玉蟾宫
数据结构·c++·算法
Simon5231431 分钟前
常见404 500错误解析
网络·学习·servlet·html5
江屿风43 分钟前
【c++笔记】类和对象流食般投喂(上)
开发语言·c++·笔记
minglie11 小时前
e和π是无理数和超越数
学习
是个西兰花1 小时前
单列模式和C++中的类型转换
c++·单例模式·设计模式·rtti