当前位置: 首页 > news >正文

C++类成员

一、内联函数(Inline Functions)

  1. 作用
    解决频繁调用小函数时的栈内存消耗问题,通过将函数代码直接插入调用点,避免压栈/出栈开销。

  2. 定义形式

    inline 返回类型 函数名(参数列表) { ... }
    

    • 隐式声明:类内直接定义的成员函数默认内联(需函数体简单)。

    • 显式声明:类外定义时使用inline关键字。

  3. 限制条件
    • 函数体不能包含复杂结构(如循环、分支、递归)。

    • 编译器可能忽略复杂函数的inline请求。

  4. 适用场景
    适用于短小且频繁调用的函数(如getter/setter)。


二、this指针

  1. 作用
    指向当前对象实例,隐式传递给成员函数,用于区分参数与成员变量名冲突。

  2. 示例

    class A {int x, y;
    public:A(int x, int y) {this->x = x; // 使用this区分成员变量this->y = y;}
    };
    
  3. 特点
    • 类型为类名* const(常量指针)。

    • 成员函数中访问成员变量时默认隐含this->


三、静态成员(Static Members)

  1. 静态数据成员
    • 定义:类内声明,类外初始化(必须一次)。

    class SavingsAccount {static float currentRate; // 类内声明
    };
    float SavingsAccount::currentRate = 0.02; // 类外初始化
    

    • 特性:所有对象共享同一内存,属于类而非对象。

  2. 静态成员函数
    • 定义:使用static修饰,无this指针,只能访问静态成员。

    static void updateRate(float r) { currentRate = r; }
    

    • 调用方式:通过类名直接调用。

    SavingsAccount::updateRate(0.03);
    
  3. 应用场景
    共享数据(如利率、计数器)或工具函数。


四、友元(Friend)

  1. 友元函数
    • 作用:允许非成员函数访问类的私有成员。

    • 声明:类内用friend修饰,定义在类外。

    class A {friend void printA(const A& a); // 友元函数声明
    };
    void printA(const A& a) { ... } // 可直接访问A的私有成员
    
  2. 友元类
    • 声明:友元类的所有成员函数可访问当前类的私有成员。

    class B { friend class C; };
    
  3. 注意事项
    • 破坏封装性,需谨慎使用。

    • 关系单向、不可传递、不可继承。


五、const成员函数

  1. 定义
    在函数参数列表后加const,表示不修改对象状态。

    class A {int x;
    public:int getX() const { return x; } // 常成员函数
    };
    
  2. 特性
    • 不能修改成员变量,不能调用非const成员函数。

    • 常对象(const A a;)只能调用const成员函数。

  3. 应用场景
    保证对象状态不变的接口(如getter方法)。


六、问题解决示例

  1. 构造函数参数冲突
    使用this->x = x避免同名参数覆盖成员变量。

  2. 静态成员共享数据
    如银行账户类中,用static float currentRate实现所有账户共享利率。

  3. 友元访问私有成员
    通过友元函数或友元类直接操作私有数据(需权衡封装性)。


总结
• 内联函数优化性能,但需谨慎使用。

• this指针解决成员变量与参数同名问题。

• 静态成员实现数据共享,类外初始化是关键。

• 友元提供跨类访问权限,但破坏封装性。

• const成员函数确保对象状态安全,是常对象的唯一接口。

通过合理使用这些特性,可以提升代码效率和设计灵活性,同时需注意维护良好的封装性。

相关文章:

  • 【技巧】使用frpc点对点安全地内网穿透访问ollama服务
  • Ascend的aclgraph(五)PrimTorch TorchInductor
  • 网页Web端无人机直播RTSP视频流,无需服务器转码,延迟300毫秒
  • Dagster Pipes系列-1:调用外部Python脚本
  • 按钮导航组件 | 纯血鸿蒙组件库AUI
  • 基于STM32、HAL库的DPS368XTSA1气压传感器 驱动程序设计
  • Java高频面试之并发编程-16
  • 设置环境变量启动jar报
  • 基于SpringBoot的蜗牛兼职网设计与实现|源码+数据库+开发说明文档
  • Qt Creator 配置 Android 编译环境
  • 火山RTC 6 自定义视频
  • 深入解析MySQL联合查询(UNION):案例与实战技巧
  • 区块链技术构建电子发票平台“税链”
  • JVM之垃圾回收器
  • 开源 RPA 工具深度解析与官网指引
  • 【Git】GitHub上传图片遇到的问题
  • Spark,序列化反序列化
  • C# 基础 try-catch代码块
  • 「华为」人形机器人赛道投资首秀!
  • 单片机学习Day08--相邻流水灯
  • 人民日报钟声:通过平等对话协商解决分歧的重要一步
  • 寒武纪陈天石:公司的产品力获得了行业客户广泛认可,芯片市场有望迎来新增量需求
  • 中美大幅下调超100%关税,印巴四日“战争”复盘|907编辑部
  • A股高开高走:沪指涨0.82%,创指涨2.63%,超4100股收涨
  • 卢正已任上海市司法局党委委员、副局长
  • 大四本科生已发14篇SCI论文?学校工作人员:已记录汇报