Vector 概述 Vector 是一个能够存放任意型别的动态数组 Vector 的数据结构和操作与数组 (array) 类似,在内存中的表现形式是一段地址连续的空间 Vector 与数组的区别在于,数组大小往往是定义时就固定的 (比如:char buffer [256]);Vector 支持动态空间大小调整,随着元素的加入,vector 内部会自…
1. 字符串初始化和基本属性 1.1 C++ 字符串操作介绍 C++ 标准库的 std::string 提供了灵活的字符串初始化方式,包括默认初始化(空字符串)和带初始值的初始化。字符串的基本属性包括是否为空、长度(字符数量)和容量(已分配的存储空间)。size() 和 length() 方法返回字符串的字符数,empty() 方法检查字符串是否为…
条款 32:确定你的 public 继承塑模出 is - a 关系。 以C++进行面向对象编程,最重要的一个规则是:public inheritance(公开继承)意味“is-a"(是一种)的关系。 如果你令class D("Derived")以public形式继承class B("Base"),你…
继承作为 C++ 面向对象编程的三大核心支柱之一,为代码复用与功能扩展提供了强大支持。然而,继承体系中的访问控制机制、多态实现逻辑以及不同继承方式的适用场景,始终是开发者理解的难点。本文将系统梳理 public/protected/private 三种继承方式的特性差异,深入剖析虚函数与访问权限的交互规则,详解多重继承的常见陷阱及解决方案,帮助读者…
引言 在面向对象编程体系中,类与类之间的关系构建起程序架构的骨架。本文将以 C++ 语言为实践载体,采用 plantUML 绘制 UML 类图,通过将 plantUML 代码与其渲染图对照展示,结合可视化结果,深度剖析继承(is-a)、聚合 / 组合(has-a)、依赖(dependence)、关联等核心关系模型。同时穿插接口实现机制、重载与重写的…
在 Java 编程领域,反射机制如同赋予开发者一把 “万能钥匙”,能在运行时动态操作类与对象。本文将结合实际代码示例,深入剖析反射的核心概念、操作方法及其在代理模式中的应用,帮助读者全面掌握这一高级特性。 一、反射核心概念与作用 1. 什么是反射? 反射(Reflection)是 Java 的一项强大特性,允许程序在运行时动态获取类的信息(如类的属…
条款 26:尽可能延后变量定义的出现时间。 实际上就是代码规范中在使用的地方进行定义的另一种说法。目的是为了改善程序运行效率。 条款 27:尽量少做转型动作。 旧式转型: T(expression) // 将expression转型为T (expression)T // 将expression转型为T 两种方式无差别,C风格。 C++新式转型: c…
条款 18:让接口容易被正确使用,不易被误用。 核心原则:接口设计的核心目标是实现「编译期拦截错误,运行期降低隐患」。借助类型系统、语义约束及自动化资源管理机制,将潜在错误在代码编写阶段彻底消除。 一、促进正确使用:保持一致性与直觉化 与内置类型行为对齐 案例:自定义Rational类时,为保证与int行为一致,需让a * b = c这一错误写法编…
常见的资源类型 内存、文件描述器(file descriptors)、互斥锁(mutex locks)、图形界面中的字型和笔刷、数据库连接、网络socks。 条款13: 以对象管理资源 普通示例: class Investment {...}; // "投资类型"继承体系中的root class // 投资类的具体创建,指向In…
条款 05: 了解 C++ 默默编写并调用哪些函数 在 C++ 中,即使定义一个看似空无一物的类,编译器也会在需要时隐式生成一系列特殊成员函数。这些函数如同幕后工作者,支撑着对象的基础操作。 空类的默认函数生成机制 当定义class Empty {};这样的空类时,编译器会隐式声明以下特殊成员函数,且仅在被调用时才生成实际实现: class Emp…