跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

C++ 类完全指南:从基础定义到访问控制实践

综述由AI生成C++ 类作为面向对象编程的核心,充当着对象设计的蓝图角色。文章深入剖析了类的定义结构,包括成员变量与函数、访问限定符(public/private/protected)的权限控制逻辑,以及类内与类外定义成员函数的区别。同时解释了类作用域对生命周期的影响,并强调静态成员变量必须在类外初始化的编译规则,为后续继承多态打下基础。

w795471发布于 2026/3/30更新于 2026/6/1221 浏览
C++ 类完全指南:从基础定义到访问控制实践

假想一下,你是一个顶级汽车设计师。你的任务不是亲自拧紧每一个螺丝,而是要设计出一幅'汽车蓝图'。你在图纸上规划了车轮、车灯、V8 发动机等所需的一切,这份设计蓝图就相当于 C++ 中的'类'。它规定了汽车的属性(例如离合器)和方法(功能:换挡)。类本身不是一辆真正的汽车,只是设计规划;后续工厂按照蓝图生产出的汽车就是实例化,流水线上每一辆车都是这个蓝图的一个对象,它们都拥有蓝图定义的属性和功能。

1. 类

1.1 类的定义

类的基本思想是数据抽象和封装。数据抽象依赖于接口和实现的分离:类的接口包括用户所能执行的操作,实现则包含数据成员、负责接口的函数及私有辅助函数。封装实现了接口与实现的分离,隐藏细节后,用户只能使用指定接口而无法直接访问内部实现。

在 C++ 中通过关键字 class 定义类,通常包括类名、访问限定符、成员变量和成员函数。注意定义结束时花括号外的分号不能省略。

class ClassName {
public: // 公有成员,可直接访问
    ClassName();      // 构造函数
    ~ClassName();     // 析构函数
    void test();      // 成员函数
private: // 私有成员,仅成员函数或友元可访问
    int a;
protected: // 受保护成员,派生类可访问
    int b;
};

成员函数分为类内定义和类外定义。类内定义时,编译器通常隐式将其视为内联函数:

class ClassName {
public:
    void setName(const std::string& name) { _name = name; }
private:
    std::string _name;
};

类外定义则需在类内声明,使用作用域解析运算符 :: 在外部定义函数体:

class ClassName {
public:
    void setName(const std::string& name);
private:
    std::string _name;
};

{
    _name = name;
}
void ClassName::setName(const std::string& name)

为了避免形参与成员变量命名冲突,习惯为成员变量添加特殊标识(如下划线 _),这样代码更清晰且不易出错。

1.2 访问限定符

访问限定符是封装的基石,决定了类成员的可见性。C++ 提供三种主要限定符:public、private、protected。

1.2.1 public 访问限定符

public 成员对类外代码可见,通常用于暴露接口。

class MyClass {
public:
    int publicVar;
    void publicFunction() {
        // 函数体
    }
};

int main() {
    MyClass obj;
    obj.publicVar = 10;       // 直接访问
    obj.publicFunction();     // 直接调用
    return 0;
}

文章配图

1.2.2 private 访问限定符

private 成员仅能被类成员函数和友元函数访问,类外无法直接修改。这能提升代码的安全性和稳定性。

class MyClass {
public:
    void setPrivateVal(int a) {
        privateVal = a;
    }
private:
    int privateVal;
};

int main() {
    MyClass test;
    // test.privateVal = 10; // 报错:不可访问
    test.setPrivateVal(10);   // 正确:通过公共接口访问
    return 0;
}

文章配图

1.2.3 protected 访问限定符

protected 成员可被类成员函数、友元函数及派生类访问,但类外不可见。它是 public 和 private 的折中方案,常用于继承体系。

class Base {
protected:
    int val;
};

class Derived : public Base {
public:
    void func(int a) {
        val = a;
        std::cout << "val=" << val << std::endl;
    }
};

int main() {
    Derived d;
    d.func(10);
    return 0;
}

文章配图

1.3 类域

类域即类作用域,影响成员的查找规则而非生命周期。不同作用域可存在同名变量,但同一作用域内不可重复。

类外定义成员函数时必须使用 :: 指明类域:

class Date {
public:
    void Init(int year, int month, int day);
private:
    int _year, _month, _day;
};

void Date::Init(int year, int month, int day) {
    _year = year;
    _month = month;
    _day = day;
}

int main() {
    Date time;
    time.Init(2025, 9, 21);
    return 0;
}

静态成员变量必须在类外定义和初始化。这是因为 C++ 遵循'一次定义规则',类内声明仅告知编译器类型,不分配内存。类外定义确保整个程序中该变量只有一份存储,避免多重定义错误,并明确其全局生命周期。

class MyClass {
public:
    static int val;
};

// 类外定义并初始化
int MyClass::val = 10;

文章配图

目录

  1. 1. 类
  2. 1.1 类的定义
  3. 1.2 访问限定符
  4. 1.2.1 public 访问限定符
  5. 1.2.2 private 访问限定符
  6. 1.2.3 protected 访问限定符
  7. 1.3 类域
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C++ STL 算法详解
  • Linux 进程间通信:System V 共享内存原理与实战
  • 基于视觉的增强现实特效技术解析与实战
  • OpenCV 通用内部函数:C++ 代码矢量化实战指南
  • 优化 PyCharm 中 Copilot 代码建议准确性的实用技巧
  • AI 时代的内容创作:从代码到认知的范式转移
  • Android LiveData 核心使用场景与最佳实践详解
  • 3 分钟学会给 Cursor 配置代理
  • 图论算法入门:深入理解 DFS、BFS 与树图遍历
  • 主流开源 RSS 阅读器精选:桌面与移动端最佳实践
  • 法律人使用 AI 大模型指南:Prompt 工程与场景应用
  • Visual Studio 2022 连接 Gitee 详细操作指南
  • 微服务 OJ 系统实战:基于 Spring Cloud Gateway 的 JWT 认证实现
  • Python GUI 程序打包为 EXE 实战指南:从 Tkinter 到企业级交付
  • C++ STL 容器详解:map 与 set 原理及实战
  • VSCode 远程 SSH 模式下 Copilot Claude Agent 异常修复
  • DeepSeek-R1-Distill-Llama-8B 数学推导与逻辑推理能力实测
  • 阿里开源纯前端浏览器自动化 PageAgent 技术解析
  • MySQL 基础:数据创建与查询入门指南
  • AIGC 电商实战:厘清品牌叙事与商品素材的 AI 应用边界

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online