C++语言基础3:用户自定义类型“class”详细讲解
📅 2026/7/5 14:25:53
👁️ 阅读次数
📝 编程学习
在 C++ 中,class是定义用户自定义类型(user-defined type)的核心关键字。它用于将数据(成员变量)和操作这些数据的函数(成员函数)封装在一起,形成一个逻辑单元,是 C++面向对象编程(OOP)的基石。
一、基本语法
例:
class ClassName { // 访问控制区(public / private / protected) public: // 公有成员:对外接口 void publicFunction(); int publicVar; private: // 私有成员:内部实现细节 void privateFunction(); double privateData; };✅ 类定义以
class开头,后跟类名,大括号{}包裹成员,并以分号;结尾。
二、核心特性详解
1.封装(Encapsulation)
- 将数据和操作数据的方法绑定在一起。
- 通过
public/private控制访问权限,隐藏实现细节。
例:
class Circle { private: double radius; // 外部不能直接修改 public: void setRadius(double r) { if (r > 0) radius = r; // 可加入合法性检查 } double getArea() const { return 3.14159 * radius * radius; } };🔒优势:防止非法操作(如负半径),保证对象状态一致性。
2.访问控制(Access Control)
class默认成员为private(与struct不同)。- 必须显式使用
public:才能暴露接口。
例:
class MyClass { int a; // 默认 private public: int b; // 显式 public }; MyClass obj; // obj.a = 10; // ❌ 错误!a 是 private obj.b = 20; // ✅ 正确3.构造函数与析构函数
- 构造函数(Constructor):初始化对象。
- 析构函数(Destructor):清理资源(如释放内存)。
例:
class FileHandler { private: FILE* file; public: // 构造函数 FileHandler(const char* filename) { file = fopen(filename, "r"); } // 析构函数(自动调用) ~FileHandler() { if (file) fclose(file); } };⚠️ 若未定义,编译器会生成默认版本(但可能不满足需求)。
4.继承(Inheritance)
- 使用
:实现继承,支持代码复用。 - 默认继承方式为
private(需显式写public表示公有继承)。
例:
class Animal { public: void eat() { cout << "Eating...\n"; } }; class Dog : public Animal { // 公有继承 public: void bark() { cout << "Barking!\n"; } }; Dog d; d.eat(); // ✅ 继承自 Animal d.bark();📌公有继承表达 “is-a” 关系(狗是一种动物)。
5.多态(Polymorphism)
- 通过虚函数(virtual function)实现运行时多态。
例:
class Shape { public: virtual double area() const = 0; // 纯虚函数 → 抽象类 }; class Rectangle : public Shape { double width, height; public: double area() const override { return width * height; } }; Shape* s = new Rectangle(); cout << s->area(); // 调用 Rectangle::area()🔁 多态允许统一接口操作不同子类对象。
三、classvsstruct:关键区别
| 特性 | class | struct |
|---|---|---|
| 默认访问权限 | private | public |
| 默认继承方式 | private | public |
| 语义侧重 | 行为封装(OOP) | 数据聚合(POD) |
💡 技术上二者功能完全等价,选择取决于设计意图:
- 用
class表示“有行为的对象”(如BankAccount)- 用
struct表示“纯数据容器”(如Point { int x, y; })
四、高级特性(简要提及)
| 特性 | 说明 |
|---|---|
| 友元(friend) | 允许非成员函数/类访问私有成员 |
| 静态成员(static) | 属于类而非对象,共享于所有实例 |
| 运算符重载 | 自定义+,==等操作符行为 |
| 模板类(template class) | 支持泛型编程(如std::vector<T>) |
五、为什么需要class?
- 模块化:将相关数据和逻辑组织在一起。
- 抽象:隐藏复杂实现,提供简洁接口。
- 复用:通过继承和组合减少重复代码。
- 维护性:修改内部实现不影响外部调用者。
总结
| 关键点 | 说明 |
|---|---|
| 本质 | 用户自定义类型,包含数据 + 方法 |
| 默认权限 | 成员和继承均为private |
| OOP 支撑 | 封装、继承、多态的实现基础 |
| 与 struct | 功能相同,语义和默认权限不同 |
💡一句话理解:
class是 C++ 中构建复杂系统的“积木”,它让代码更安全、可读、可维护。
编程学习
技术分享
实战经验