C++类作用域

C++ 类作用域(class scope)

简单说:类里面定义的成员(变量、函数),都属于类作用域,只能在类内/通过对象/类名访问

一、什么是类作用域

class { ... } 大括号内部的所有:

  • 成员变量(属性)
  • 成员函数(方法)
  • 类型别名、枚举、静态成员

都处在类作用域外部不能直接访问

cpp 复制代码
class Person {
public:
    int age;       // 类作用域
    void show();    // 类作用域
};
// age、show 不能直接用,必须通过对象/类名

二、访问规则(3种方式)

1. 类内成员函数:直接访问

成员函数天然在类作用域内,直接用成员名

cpp 复制代码
class Person {
public:
    int age = 18;
    void print() {
        cout << age; // 直接访问,不用对象
    }
};

2. 类外普通函数:必须用 . / ->

cpp 复制代码
Person p;
p.age = 20;
p.print();

3. 静态成员:用 类名::

cpp 复制代码
class Person {
public:
    static int num;
};
int Person::num = 100; // 类外初始化
Person::num = 200;     // 类作用域访问符 ::

三、作用域分辨符 ::(重点)

类名::成员名 专门用来访问类作用域的成员

  • 类外定义成员函数
  • 访问静态成员
  • 解决名字冲突
cpp 复制代码
class Person {
public:
    void show();
};
// 类外实现,必须加 Person::
void Person::show() {
    cout << "hello";
}

四、类作用域 vs 局部作用域 vs 全局作用域

  1. 全局作用域:函数外面,整个文件可用
  2. 局部作用域 :函数/代码块 {} 内,仅内部可用
  3. 类作用域:class 内部,必须通过对象/类名访问

名字查找优先级(从近到远)

局部 > 类作用域 > 全局

cpp 复制代码
int a = 100; // 全局
class A {
public:
    int a = 20; // 类作用域
    void f() {
        int a = 5; // 局部
        cout << a; // 输出5,优先局部
    }
};
  • 想访问类内的a:this->a
  • 想访问全局的a:::a

五、this 指针与类作用域

成员函数里,this 代表当前对象,强制指定类作用域的成员,避免局部变量屏蔽

cpp 复制代码
void setAge(int age) {
    this->age = age; 
    // this->age 是类成员,age是形参
}

六、访问控制(和类作用域配套)

类作用域分3种访问权限:

  • public:外部可访问
  • private仅类内可访问(默认)
  • protected:类内 + 子类可访问

极简总结(必背)

  1. 类作用域 :class 大括号内,成员必须通过对象或 类名:: 访问
  2. :::作用域解析符,访问类成员、静态成员
  3. 名字查找:局部 > 类 > 全局
  4. this-> 可显式访问类成员,防止被局部变量覆盖
相关推荐
AI人工智能+电脑小能手13 分钟前
【大白话说Java面试题 第192题】【08_Kafka篇】第8题:死信队列是什么?延时队列是什么?
java·kafka·消息队列·死信队列·延时队列
meng半颗糖14 分钟前
3.Java流程控制语句
java·开发语言·intellij-idea
大模型码小白29 分钟前
企业级检索增强后端集成:Java 服务如何管理知识库版本
java·服务器·开发语言·人工智能·python·microsoft
用户61691822999340 分钟前
记录一次死锁检测
java
我不是懒洋洋40 分钟前
从零实现一个分布式日志平台:ELK的核心设计
c++
jvmind_dev42 分钟前
1c1g 容器莫名 OOM Killed?排查 Metaspace 持续增长与脚本引擎的坑
java·后端
AI多Agent协作实战派1 小时前
AI多Agent协作系统实战(二十二):从6列到12列——任务监控报告的进化之路
java·人工智能·uni-app·bug
用户3126874877201 小时前
@Transactional 注了等于没用?Spring 事务失效的 7 种场景,你踩过几个
java
神仙别闹1 小时前
基于QT(C++)实现Windows 自启动项查看和分析
c++·windows·qt
千桐科技1 小时前
DataX 执行引擎正式加入:qData 开源版 v1.6.0 新增 Quartz + DataX 轻量运行模式!
java·大数据·开源·数据治理·数据中台·qdata