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 坐标值,并将其打印在屏幕上。


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

相关推荐

  1. C++作用

    2024-02-07 22:50:02       35 阅读
  2. C语言作用与生命周期

    2024-02-07 22:50:02       29 阅读
  3. c语言,局部变量作用是?

    2024-02-07 22:50:02       10 阅读
  4. C++:栈作用

    2024-02-07 22:50:02       31 阅读
  5. Kotlin 作用函数

    2024-02-07 22:50:02       37 阅读
  6. C 作用规则

    2024-02-07 22:50:02       22 阅读
  7. Bean作用

    2024-02-07 22:50:02       10 阅读
  8. Python名称空间和作用

    2024-02-07 22:50:02       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-07 22:50:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-07 22:50:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-07 22:50:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-07 22:50:02       20 阅读

热门阅读

  1. c#使用Minio(3.1.13版本)

    2024-02-07 22:50:02       32 阅读
  2. C语言中的变量与函数详解

    2024-02-07 22:50:02       32 阅读
  3. Top 20 Docker 面试题(附答案)

    2024-02-07 22:50:02       31 阅读
  4. 2023-12蓝桥杯STEMA 考试 Python 中高级试卷解析

    2024-02-07 22:50:02       32 阅读
  5. leetcode69 x 的平方根

    2024-02-07 22:50:02       31 阅读
  6. SQL世界之基础命令语句

    2024-02-07 22:50:02       33 阅读
  7. 使用自定义注解处理对象状态字段

    2024-02-07 22:50:02       31 阅读
  8. Node后端基础8-登录认证1-认识Token

    2024-02-07 22:50:02       33 阅读
  9. 蓝桥杯刷题--python-3

    2024-02-07 22:50:02       35 阅读
  10. C语言中的条件编译:探索编译时的决策

    2024-02-07 22:50:02       37 阅读
  11. CGAL::2D Arrangements-5

    2024-02-07 22:50:02       29 阅读
  12. c++学习:基本变量类型+宽字符用法

    2024-02-07 22:50:02       28 阅读
  13. MySQL中常用的数据类型

    2024-02-07 22:50:02       27 阅读