C++ 类与对象:面向对象编程入门基础
你是否听说过'面向对象编程'(OOP),却对具体实现感到困惑?C++ 作为一门强大的语言,其核心特性让代码更模块化、易维护。而'类'和'对象'正是这一切的基石。本文将带你从零开始,理清类与对象的核心概念。
一、面向过程和面向对象的初步认识
C 语言是面向过程的,关注求解问题的步骤,通过函数调用逐步解决。比如点外卖,就是打开软件、选餐、下单、等待配送。这种方式下,数据和函数是分离的,没有封装概念。一旦需求变化(如增加新角色),往往需要大量修改代码。
C++ 则是面向对象的,将问题中的实体抽象为'对象',每个对象拥有自己的属性和行为。我们将用户、商家、骑手抽象为'类',数据和操作数据的方法封装在一起。这样,如果需求变化,可以通过添加新类或方法来实现,无需修改现有逻辑。
二、类的定义
class ClassName {
// 成员变量和成员函数
}; // 注意:类定义结束后的分号不能省略
class 是关键字,ClassName 是类名,{} 内是类体。类体中的变量称为成员变量(属性),函数称为成员函数(方法)。
定义类通常有两种方式:
- 声明和定义全部放在类体中。此时成员函数会被编译器视为内联函数处理。
- 类声明放在
.h文件中,成员函数定义放在.cpp文件中。注意:成员函数名前需加类名::作用域解析符。
为了区分清晰,通常给成员变量加前缀(如 _name)。
三、类的访问限定符及封装
3.1 访问限定符
C++ 通过访问权限控制外部对类接口的使用,实现封装。
public:修饰的成员在类外可直接访问。protected和private:修饰的成员在类外不能直接访问。- 作用域从出现位置开始,直到下一个访问限定符或类结束。
class默认访问权限为private,struct默认为public(为了兼容 C)。
3.2 封装
封装是面向对象三大特性之一,核心在于两点:
- 数据隐藏:将成员变量设为
private,外部无法直接访问或修改。 - 接口暴露:只暴露必要的公共方法(如
setPrice、getPrice)供外部调用。
就像电脑内部电路被封装起来,只留 USB 等接口。封装还能进行数据校验,例如在 setPrice 中检查价格是否为负数,确保数据合法性。
四、类对象模型
4.1 类对象大小的基本规则
类对象大小主要由以下因素决定:
- 成员变量大小:类型决定占用空间(如
int占 4 字节)。 - 内存对齐:为提高访问效率,编译器会对数据进行对齐。
- 虚函数:若存在虚函数,编译器会添加虚表指针(vptr),通常占 4 或 8 字节。
- 空类大小:若无成员变量,大小通常为 1 字节(用于占位,确保每个对象有唯一地址)。
4.2 结构体内存对齐规则
复习一下结构体的对齐规则:


