c++ 成员函数,非成员函数,全局函数,静态函数

成员函数和非成员函数是指在C++中定义的不同类型的函数。下面是它们的概念和举例:

成员函数:

  • 成员函数是指定义在类或结构体内部函数,它们成为类的成员。
  • 成员函数可以直接访问类或结构体的成员变量和其他成员函数,包括私有成员
  • 成员函数被隐式传递一个指向当前对象的指针(即this指针),可以对对象进行操作和访问。
  • 成员函数可以是静态成员函数或非静态成员函数。

以下是一个具有非静态和静态成员函数的示例:

class MyClass {
private:
    int memberVariable;

public:
    void memberFunction() {
        // 访问成员变量
        memberVariable = 42;
        // 访问其他成员函数
        anotherMemberFunction();
    }

    static void staticMemberFunction() {
        // 静态成员函数不使用this指针
        // 无法访问非静态成员变量和非静态成员函数
    }

    void anotherMemberFunction() {
        // 成员函数也可以调用其他成员函数
    }
};

非成员函数:

  • 非成员函数是在类外部定义的函数,与任何类或结构体无关。
  • 非成员函数不能直接访问类或结构体的成员变量和非静态成员函数,除非通过参数传递对象的方式。
  • 非成员函数可以被视为全局函数,可以在全局作用域中进行访问。

以下是一个非成员函数的示例:

// 非成员函数
int addNumbers(int a, int b) {
    return a + b;
}

int main() {
    int result = addNumbers(10, 20);
    return 0;
}

在这个示例中,addNumbers是一个非成员函数,它不隶属于任何类或结构体。它可以在全局作用域中被访问,通过传递参数的方式来操作数据。主函数main中调用了这个非成员函数addNumbers,并将结果存储在变量result中。

全局函数:

  • 全局函数是在全局作用域定义的函数,没有与之关联的类或对象。
  • 全局函数可以被程序中的任何地方调用,无需通过类名或对象来访问。
  • 全局函数可以访问全局变量和其他全局函数。
#include <iostream>

// 全局函数
void globalFunction() {
    std::cout << "This is a global function." << std::endl;
}

int main() {
    globalFunction(); // 调用全局函数

    return 0;
}

全局函数和非成员函数之间的关系可以描述为:全局函数是非成员函数的一种特殊情况。当一个函数无需与特定的类或对象相关联时,它可以被定义为全局函数,从而成为一种非成员函数。

全局函数和非成员函数在某些应用场景下可以起到相似的作用。这些应用场景包括:

  1. 提供一组独立的功能函数:全局函数和非成员函数都可以被用来定义一组独立的功能函数,这些函数可以操作多个类的对象或执行与类无关的操作。例如,可以定义一个全局函数来计算两个数字的和,而这两个数字可以属于不同的类。

  2. 作为友元函数:全局函数和非成员函数可以被定义为类的友元函数,以便访问类的私有成员。友元函数可以在类的内部声明,但在类的外部定义。这种情况下,全局函数或非成员函数可以访问类的私有成员,同时不是类的成员函数。

  3. 重载运算符函数:全局函数和非成员函数可以用来实现类对象的特定运算功能,例如重载算术运算符或比较运算符。这些函数可以作为全局函数或非成员函数来定义,并可以操作对应的类对象。

静态函数:

  • 静态函数是属于某个类的函数,不依赖于类的对象。
  • 静态函数可以通过类名直接调用,而不需要通过对象来访问。
  • 静态函数只能访问静态成员变量和其他静态成员函数不能访问非静态成员变量和非静态成员函数。
    #include <iostream>
    
    class MyClass {
    private:
        static int staticMemberVariable;
    
    public:
        static void staticMemberFunction() {
            std::cout << "This is a static member function." << std::endl;
            std::cout << "Static member variable: " << staticMemberVariable << std::endl;
        }
    };
    
    // 静态成员变量的初始化
    int MyClass::staticMemberVariable = 42;
    
    int main() {
        // 通过类名直接调用静态成员函数
        MyClass::staticMemberFunction();
    
        return 0;
    }
    
This is a static member function.
Static member variable: 42

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值