C++中的作用域案例详解

 更新时间:2024年02月09日 10:45:56   作者:周杰伦fans  
作用域规定了标识符在代码中的可见性和可访问性,全局作用域中的标识符可以在整个程序中使用,局部作用域中的标识符只能在其所在的代码块中使用,而命名空间作用域提供了一种组织和封装代码的方式,以避免命名冲突,这篇文章主要介绍了C++中的作用域,需要的朋友可以参考下

在C++中,作用域是指程序中变量、函数和其他命名实体的可见性和可访问性范围。作用域规定了在代码中的哪些位置可以引用或使用特定的标识符。C++中有多种类型的作用域,包括全局作用域、局部作用域和命名空间作用域。

1.全局作用域:

全局作用域是在整个程序中都可见和可访问的范围。在全局作用域中声明的变量和函数可以在程序的任何地方使用。全局作用域中的标识符可以通过在其声明之前使用::运算符来引用。

#include <iostream>
int globalVariable = 10;
void globalFunction()
{
    std::cout << "This is a global function." << std::endl;
}
int main()
{
    std::cout << globalVariable << std::endl;  // 输出:10
    globalFunction();  // 输出:"This is a global function."
    return 0;
}

2.局部作用域:

局部作用域是指在特定代码块(如函数、循环或条件语句内部)中定义的变量的作用域。局部变量只能在其所在的代码块中访问和使用。

#include <iostream>
void localFunction()
{
    int localVar = 20;  // 局部变量
    std::cout << localVar << std::endl;  // 输出:20
}
int main()
{
    localFunction();
    // std::cout << localVar << std::endl;  // 错误!局部变量在此处不可见
    return 0;
}

3.命名空间作用域:

命名空间作用域是指在命名空间中定义的变量、函数和其他实体的作用域。命名空间提供了一种组织和封装代码的方式,以避免命名冲突,并将相关的实体放在一个逻辑单元中。

#include <iostream>
namespace MyNamespace
{
    int x = 30;
    void namespaceFunction()
    {
        std::cout << "This is a function in MyNamespace." << std::endl;
    }
}
int main()
{
    std::cout << MyNamespace::x << std::endl;  // 输出:30
    MyNamespace::namespaceFunction();  // 输出:"This is a function in MyNamespace."
    return 0;
}
#pragma once
#include<iostream>
using namespace std;
class Point {
public:
    void setX(int x); // 设置m_X的值
    int getX(); // 获取m_X的值
    void setY(int y); // 设置m_Y的值
    int getY(); // 获取m_Y的值
private:
    int m_X; // 点的x坐标
    int m_Y; // 点的y坐标
};

这部分代码定义了一个名为 Point 的类,用于表示一个点的坐标。它具有以下公有成员函数:

  • void Point::setX(int x):在 Point 类的作用域内,用于设置点的 x 坐标(m_X)的值。
  • int Point::getX():在 Point 类的作用域内,用于获取点的 x 坐标(m_X)的值。
  • void Point::setY(int y):在 Point 类的作用域内,用于设置点的 y 坐标(m_Y)的值。
  • int Point::getY():在 Point 类的作用域内,用于获取点的 y 坐标(m_Y)的值。
  • 私有成员变量(数据成员)包括:
  • int Point::m_X:在 Point 类的作用域内,表示点的 x 坐标。
  • int Point::m_Y:在 Point 类的作用域内,表示点的 y 坐标。
void Point::setX(int x) {
    m_X = x; // 将传入的x赋值给m_X
}
int Point::getX() {
    return m_X; // 返回m_X的值
}
void Point::setY(int y) {
    m_Y = y; // 将传入的y赋值给m_Y
}
int Point::getY() {
    return m_Y; // 返回m_Y的值
}

这部分是 Point 类成员函数的实现。每个成员函数的定义都在类的作用域内。实现部分包括:

  • void Point::setX(int x):在 Point 类的作用域内,将传入的 x 值赋给 m_X,用于设置点的 x 坐标。
  • int Point::getX():在 Point 类的作用域内,返回 m_X 的值,用于获取点的 x 坐标。
  • void Point::setY(int y):在 Point 类的作用域内,将传入的 y 值赋给 m_Y,用于设置点的 y 坐标。
  • int Point::getY():在 Point 类的作用域内,返回 m_Y 的值,用于获取点的 y 坐标。
  • 这样,就可以在其他地方使用 Point 类,并通过调用成员函数来设置和获取点的坐标。
#include<iostream>
using namespace std;
#include "Point.h"
int main() {
    Point p; // 创建一个 Point 对象
    p.setX(5); // 调用成员函数设置 x 坐标为 5
    p.setY(10); // 调用成员函数设置 y 坐标为 10
    cout << "Point coordinates: (" << p.getX() << ", " << p.getY() << ")" << endl; // 打印点的坐标
    return 0;
}
  • 在 main 函数中,首先我们包含了 头文件和 Point.h 头文件,然后使用 using namespace std; 来简化对 std 命名空间中的标识符的使用。
  • 在 main 函数的主体中,我们创建了一个 Point 对象 p。然后使用 p.setX(5) 调用成员函数 setX,将 x 坐标设置为 5。接着使用 p.setY(10) 调用成员函数 setY,将 y 坐标设置为 10。
  • 最后,我们使用 cout 对象打印点的坐标。通过调用 p.getX() 和 p.getY() 获取点的 x 和 y 坐标值,并将其打印在屏幕上。

总结:作用域规定了标识符在代码中的可见性和可访问性。全局作用域中的标识符可以在整个程序中使用,局部作用域中的标识符只能在其所在的代码块中使用,而命名空间作用域提供了一种组织和封装代码的方式,以避免命名冲突。

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

相关文章

  • C语言使用libZPlay录制声音并写到文件的方法

    C语言使用libZPlay录制声音并写到文件的方法

    这篇文章主要介绍了C语言使用libZPlay录制声音并写到文件的方法,实例分析了C语言操作音频文件的相关技巧,需要的朋友可以参考下
    2015-06-06
  • C语言实现通讯录的详细代码

    C语言实现通讯录的详细代码

    本文详细讲解了C语言实现通讯录的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • 基于matlab实现DCT数字水印嵌入与提取

    基于matlab实现DCT数字水印嵌入与提取

    数字水印技术是将一些标识信息直接嵌入数字载体当中, 或间接表示在信号载体中, 且不影响原载体的使用价值。本文主要为大家介绍了基于matlab如何实现数字水印的嵌入与提取,感兴趣的可以学习一下
    2022-01-01
  • C++使用string的大数加法运算(1)

    C++使用string的大数加法运算(1)

    这篇文章主要为大家详细介绍了C++使用string的大数加法运算,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • c++如何分割字符串示例代码

    c++如何分割字符串示例代码

    因为c++字符串没有split函数,所以字符串分割单词的时候必须自己手写,也相当于自己实现一个split函数吧!下面跟小编一起来看看如何实现这个功能。
    2016-08-08
  • OpenCV实现平均背景法

    OpenCV实现平均背景法

    这篇文章主要为大家详细介绍了OpenCV实现平均背景法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C语言中数据在内存如何存储

    C语言中数据在内存如何存储

    本文详细讲解了C语言中数据在内存如何存储,文中通过示例代码介绍的非常详细。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • c++快速排序详解

    c++快速排序详解

    快速排序总体思想:先找到一个枢轴,让他作为分水岭,通过一趟排序将待排序的记录分割成两部分,前面一部分都比枢轴小,后面一部分枢轴大,然后又分别对这两部分记录继续进行递归的排序,达到整个序列有序的目的
    2017-05-05
  • C++ explicit关键字的使用详解

    C++ explicit关键字的使用详解

    这篇文章主要介绍了C++ explicit关键字的使用详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • C/C++实现FTP文件上传下载的示例详解

    C/C++实现FTP文件上传下载的示例详解

    FTP(文件传输协议)是一种用于在网络上传输文件的标准协议,这篇文章主要为大家详细介绍了C++如何实现FTP文件上传下载功能,需要的小伙伴可以参考下
    2023-12-12

最新评论