C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++类作用域

C++类作用域详解

作者:小小编程路

C++类作用域详解,成员变量与函数仅在类内或通过作用域解析符::::可见,类外访问需明确指定类作用域,理解作用域与访问控制的区别与联系,本文介绍C++类作用域的相关知识,感兴趣的朋友一起看看吧

C++类作用域是指类定义({} 内)所创建的独立命名空间,其中声明的成员(变量、函数、类型别名等)仅在类内或通过作用域解析符 ::、对象/指针访问时可见。‌‌

类作用域是 C++ 封装与命名管理的基础,配合访问限定符(public/private/protected)实现接口控制,但二者本质不同:‌作用域决定“能否看到名字”,访问控制决定“能否使用名字”‌。‌‌

C++ 类作用域(class scope)

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

一、什么是类作用域

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

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

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

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

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

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

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

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

Person p;
p.age = 20;
p.print();

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

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

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

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

class Person {
public:
    void show();
};
// 类外实现,必须加 Person::
void Person::show() {
    cout << "hello";
}

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

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

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

局部 > 类作用域 > 全局

int a = 100; // 全局
class A {
public:
    int a = 20; // 类作用域
    void f() {
        int a = 5; // 局部
        cout << a; // 输出5,优先局部
    }
};

五、this 指针与类作用域

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

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

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

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

极简总结(必背)

  1. 类作用域:class 大括号内,成员必须通过对象或 类名:: 访问
  2. :::作用域解析符,访问类成员、静态成员
  3. 名字查找:局部 > 类 > 全局
  4. this-> 可显式访问类成员,防止被局部变量覆盖

到此这篇关于C++类作用域的文章就介绍到这了,更多相关C++类作用域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文