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-> 可显式访问类成员,防止被局部变量覆盖
相关推荐
雾里看山17 分钟前
源码目录、构建目录与 out-of-source build
c++·软件构建·cmake
evans在进步1 小时前
Tomcat NIO 工作原理详解:从 Acceptor、Poller 到容器处理链
java·tomcat·nio
渡我白衣2 小时前
并查集:基础认识与模拟实现
android·java·javascript·数据结构·c++·算法·并查集
电商API_180079052472 小时前
电商商品价格监控工具淘宝京东商品价格抓取API项目实操分享
java·大数据·开发语言·前端·数据挖掘
zzzll11112 小时前
深度剖析:HashMap 并发死循环与 ConcurrentHashMap 两代演进全解
java·开发语言
如意猴2 小时前
【C++】001--C++入门(1)
开发语言·c++
秋名RG3 小时前
2026/5/27 生产事故复盘与整改方案
java
hetao17338373 小时前
2026-09-01~09-04 hetao1733837 的刷题记录
c++·算法
血小板要健康3 小时前
链表 阶段算法总结
java·数据结构·笔记·算法·leetcode·链表
坐吃山猪3 小时前
【多线程】CompletableFuture使用
java·开发语言·多线程