news 2026/7/5 14:14:38

C++语言基础3:用户自定义类型“class”详细讲解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++语言基础3:用户自定义类型“class”详细讲解

在 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:关键区别

特性classstruct
默认访问权限privatepublic
默认继承方式privatepublic
语义侧重行为封装(OOP)数据聚合(POD)

💡 技术上二者功能完全等价,选择取决于设计意图:

  • class表示“有行为的对象”(如BankAccount
  • struct表示“纯数据容器”(如Point { int x, y; }

四、高级特性(简要提及)

特性说明
友元(friend)允许非成员函数/类访问私有成员
静态成员(static)属于类而非对象,共享于所有实例
运算符重载自定义+,==等操作符行为
模板类(template class)支持泛型编程(如std::vector<T>

五、为什么需要class

  1. 模块化:将相关数据和逻辑组织在一起。
  2. 抽象:隐藏复杂实现,提供简洁接口。
  3. 复用:通过继承和组合减少重复代码。
  4. 维护性:修改内部实现不影响外部调用者。

总结

关键点说明
本质用户自定义类型,包含数据 + 方法
默认权限成员和继承均为private
OOP 支撑封装、继承、多态的实现基础
与 struct功能相同,语义和默认权限不同

💡一句话理解
class是 C++ 中构建复杂系统的“积木”,它让代码更安全、可读、可维护。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 14:09:37

企业级 MCP 网关:统一授权、限流、协议转换与监控的架构与实现

01 引言:当 AI Agent 遇到“工具爆炸” 2026 年的今天,AI Agent 已经不再是实验室里的玩具。 从 Claude Code 到 Cursor,从企业内部的智能客服到金融领域的自动化投研,AI Agent 正在大规模进入生产环境。但随之而来的,是一个被严重低估的工程问题——工具调用的治理。 …

作者头像 李华
网站建设 2026/7/5 14:09:34

WebPShop:Photoshop专业WebP格式支持的终极解决方案

WebPShop&#xff1a;Photoshop专业WebP格式支持的终极解决方案 【免费下载链接】WebPShop Photoshop plug-in for opening and saving WebP images 项目地址: https://gitcode.com/gh_mirrors/we/WebPShop 在当今网页设计和数字内容创作领域&#xff0c;图像优化已成为…

作者头像 李华
网站建设 2026/7/5 14:05:31

终极指南:如何免费下载大疆无人机历史固件实现完全控制

终极指南&#xff1a;如何免费下载大疆无人机历史固件实现完全控制 【免费下载链接】DankDroneDownloader A Custom Firmware Download Tool for DJI Drones Written in C# 项目地址: https://gitcode.com/gh_mirrors/da/DankDroneDownloader 大疆无人机固件下载工具Dan…

作者头像 李华
网站建设 2026/7/5 14:03:36

VLC Android电视版完全指南:从零开始打造你的智能电视媒体中心

VLC Android电视版完全指南&#xff1a;从零开始打造你的智能电视媒体中心 【免费下载链接】vlc-android VLC for Android, Android TV and ChromeOS 项目地址: https://gitcode.com/gh_mirrors/vl/vlc-android 你是否曾在智能电视上寻找一个真正强大的视频播放器&…

作者头像 李华
网站建设 2026/7/5 14:01:20

Kimi LeetCode 3464. 正方形上的点之间的最大距离 Python3实现

LeetCode 3464. 正方形上的点之间的最大距离 — Python3 实现题目概述给定正方形边长 side&#xff0c;以及位于正方形边界上的若干点。需要从中选出 k 个点&#xff0c;使得任意两点之间的最小曼哈顿距离最大化。- 曼哈顿距离&#xff1a;|x1 - x2| |y1 - y2| - 关键约束&…

作者头像 李华