📜  C++中静态函数和友元函数的区别(1)

📅  最后修改于: 2023-12-03 14:39:59.298000             🧑  作者: Mango

C++中静态函数和友元函数的区别

静态函数

静态函数是一种只能在类内部使用的函数,且该函数只能操作静态成员变量。静态函数可以被类的对象调用,也可以直接通过类来调用。

静态函数使用static关键字进行声明,并且不需要通过对象来调用。

下面是一个静态函数的例子:

class MyClass {
private:
    static int count;
public:
    static void printCount() {
        cout << "count: " << count << endl;
    }
};

int MyClass::count = 0; // 静态成员变量必须在类外部初始化

int main() {
    MyClass::printCount(); // 直接通过类来调用静态函数
    MyClass c1;
    c1.printCount(); // 通过对象调用静态函数
    return 0;
}
友元函数

友元函数是一种能够访问类中私有成员的非成员函数,它不属于类的成员,但是能够访问类的私有成员。友元函数的声明需要在类的内部进行,但是定义需要在类的外部进行。

友元函数使用friend关键字进行声明,并且需要在类的内部进行声明。

下面是一个友元函数的例子:

class MyClass {
private:
    int num;
public:
    MyClass(int n) : num(n) {}
    friend void printNum(MyClass c); // 友元函数的声明
};

void printNum(MyClass c) {
    cout << "num: " << c.num << endl; // 可以访问类中的私有成员
}

int main() {
    MyClass c1(10);
    printNum(c1); // 友元函数的调用,可以访问类中的私有成员
    return 0;
}
区别

静态函数和友元函数有以下几点不同:

  • 静态函数只能访问静态成员变量,而友元函数可以访问类中的所有成员(包括私有成员)。
  • 静态函数可以通过类名直接调用,也可以通过对象调用,而友元函数只能通过对象调用。
  • 静态函数属于类的成员函数,而友元函数不属于类的成员函数,它是一个非成员函数。
  • 静态函数使用static关键字进行声明,而友元函数使用friend关键字进行声明。