• C++静态成员&友元&命名空间介绍


    定义

    1. 静态成员:静态成员是类的成员,它们在类定义中声明,但与类的实例无关。它们可以通过类名和静态成员函数访问,而不是通过类的实例。静态成员可以是数据成员(变量)或函数成员(函数)。在类定义中,可以使用关键字static来声明静态成员。
    2. 友元:友元是C++中的一种特殊关系,它允许一个类访问另一个类的私有和保护成员。通过在类定义中使用关键字friend来声明友元,可以指定一个友元类或友元函数。友元关系是单向的,即如果类A是类B的友元,则类B不一定是类A的友元。
    3. 命名空间:命名空间是一种组织代码的方式,它避免了命名冲突并提供了代码的可读性。在C++中,可以使用关键字namespace来定义命名空间。命名空间可以包含变量、函数和其他类型定义。通过使用命名空间前缀,可以在其他代码中引用该命名空间中的标识符。

    应用举例

    废话不多说,直接上列子

    // 包含命名空间
    namespace ExampleNamespace {
    
        // 声明一个类
        class ExampleClass {
        public:
            // 静态数据成员
            static int staticVariable;
    
            // 静态成员函数
            static void staticFunction() {
                std::cout << "This is a static function." << std::endl;
            }
    
            // 构造函数
            ExampleClass(int value) {
                // 使用友元访问静态数据成员
                ExampleClass::staticVariable = value;
            }
    
            // 普通成员函数
            void normalFunction() {
                std::cout << "This is a normal function." << std::endl;
            }
    
            // 友元类
            friend class ExampleFriendClass;
        };
    
        // 定义命名空间中的变量
        int ExampleClass::staticVariable = 0;
    }
    
    // 在另一个类中使用友元关系访问静态数据成员
    class ExampleFriendClass {
    public:
        void accessStaticVariable() {
            std::cout << ExampleNamespace::ExampleClass::staticVariable << std::endl;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    例子说明

    ExampleClass包含一个静态数据成员staticVariable和一个静态成员函数staticFunction。在构造函数中,使用友元关系访问了静态数据成员。ExampleFriendClass被声明为ExampleClass的友元类,从而可以访问ExampleClass的私有和保护成员。所有这些元素都在ExampleNamespace命名空间中定义。

  • 相关阅读:
    [附源码]计算机毕业设计springboot美发店会员管理系统
    SpringBoot项目统一处理返回值和异常
    光模块厂家如何实现千兆和万兆的大规模量产
    javaweb入门级操作教学,tomcal的使用
    NLP——分布式语义 Distributional Semantics:Word Vectors;Word2Vec
    kafka-eagle部署
    复习一周,字节跳动三场技术面+HR面,不小心拿了offer
    第2关:图的深度优先遍历
    Redux中间件源码解析与实现
    VMware——WindowServer2012R2安装jdk1.8及环境变量配置
  • 原文地址:https://blog.csdn.net/scy518/article/details/134436814