域作用符

本文介绍了C++中域作用符的使用方法及其在解决变量重名问题中的作用,并通过实例详细展示了如何利用域访问符访问不同作用域内的变量,同时讲解了命名空间的概念及应用场景。

域作用符

域作用符主要用来限定变量的作用域
比如:

#include<iostream>
#include "string.h"
using namespace std;

int num = 10;   //全局空间
int main()
{
    int num = 20; //栈空间
    cout << "当前num的值为:"<<num << endl;
    system("pause");
    return 0;
}
 可以看出第一个num是全局变量作用域为全局空间,第二个num是临时变量作用域为函数内部,因为两个变量都为num那么输出时会输出哪个num的只呢?

这里写图片描述

程序执行结果显示最终输出的是第二个num,因为输出语句和第二个num在同一个函数内部,输出时会选择离它近的输出,也就相当于在函数内部第二个num将第一个num覆盖了。

但是如果我要输出第一个num也就是全局变量num该怎么办呢?

#include<iostream>
#include "string.h"
using namespace std;

int num = 10;   //全局空间
int main()
{
    int num = 20; //栈空间
    cout << "当前num的值为:" <<::num << endl;
    system("pause");
    return 0;
}

执行结果:
这里写图片描述

可以看出我只是在num前面加了 :: 输出结果就变成了全局变量的num了;


域访问符::

::用来表明你要访问的变量所在的域,如果左边为空的话表示全局作用域的变量,经常搭配命名空间使用。

命名空间namespace

通过以上问题可以知道在编程过程中可能会遇到变量名重复的状况,为了区别使用重名的变量就要在域访问符前面加上变量的域,但仅仅全局域和临时变量在函数内部的局部域显然是不够用的。所以为了解决这个问题,引入了命名空间这个概念,通过使用
namespace xxx;你所使用的库函数或变量就是在该命名空间中定义的,这样一来就不会引起不必要的冲突了。

#include<iostream>
#include "string.h"
using namespace std;

int num = 10;   //全局空间
namespace test
{
    int num = 100;
}

int main()
{
    int num = 20; //栈空间
    cout << "全局变量:" <<:: num << endl;
    cout << "局部变量:" << num << endl;
    cout<<"test命名空间变量:"<<test::num << endl;
    system("pause");
    return 0;
}

这里写图片描述

从上图可以看出使用命名空间很好地区分使用了各个重名的变量。

std是一个很特殊的命名空间,它里面所有的变量以及函数都是c++标准库里的变量以及函数。

### C++ 中作用操作的概念与用法 #### 什么是作用操作? 在 C++ 编程语言中,作用操作 `::` 是一种用于区分同名实体的工具。它允许程序员明确指出某个特定名称所属的作用命名空间[^2]。 #### 如何使用作用操作? ##### 访问全局变量 当存在局部变量和全局变量重名的情况时,可以通过作用操作来访问全局变量。例如: ```cpp #include <iostream> using namespace std; int a = 10; // 定义全局变量 a int main() { int a = 20; // 定义局部变量 a cout << "Local variable a: " << a << endl; cout << "Global variable a: " << ::a << endl; // 使用作用操作访问全局变量 a } ``` 上述代码展示了如何利用作用操作访问全局变量 `a` 的值[^5]。 ##### 类成员函数定义 在类外部定义成员函数时,必须使用作用操作指明该函数属于哪个类。例如: ```cpp class MyClass { public: void display(); private: int value; }; // 使用作用操作定义类外成员函数 void MyClass::display() { // 明确表明此函数属于 MyClass 类 cout << "This is the display function of MyClass." << endl; } int main() { MyClass obj; obj.display(); // 调用类成员函数 } ``` 此处通过作用操作明确了 `display()` 函数隶属于 `MyClass` 类[^1]。 ##### 静态成员和嵌套类型的访问 对于类中的静态成员或者嵌套类型(如内部类),也需要借助作用操作进行访问。例如: ```cpp class OuterClass { public: static int staticMember; class InnerClass {}; }; int OuterClass::staticMember = 42; // 初始化静态成员变量 int main() { cout << "Static member value: " << OuterClass::staticMember << endl; OuterClass::InnerClass innerObj; // 创建嵌套类的对象 } ``` 这段代码演示了如何使用作用操作访问静态成员以及嵌套类[^3]。 ##### Qt 框架下的特殊应用 在 Qt 开发环境中,虽然遵循标准 C++ 的语法规范,但在某些情况下会有更严格的编码准则。比如,在多文件项目中合理运用命名空间可以有效减少名字冲突的风险[^4]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值