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-> 可显式访问类成员,防止被局部变量覆盖
相关推荐
karry_k2 分钟前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
karry_k9 分钟前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端
SamDeepThinking4 小时前
从源码到代码:MyBatis-Flex 与 MyBatis-Plus 的逐项对比
java·后端·程序员
她的男孩7 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
荣码8 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
plainGeekDev10 小时前
Gson → kotlinx.serialization
android·java·kotlin
小bo波18 小时前
Java Swing 图形用户界面实验 —— 从算术练习到游戏开发的完整实践
java·课程设计·gui·游戏开发·扫雷·swing
咖啡八杯20 小时前
GoF设计模式——备忘录模式
java·后端·spring·设计模式