Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;,为什么使用静态类函数而不是常规函数?_C++_Oop - Fatal编程技术网

C++ 在C++;,为什么使用静态类函数而不是常规函数?

C++ 在C++;,为什么使用静态类函数而不是常规函数?,c++,oop,C++,Oop,如果函数只执行未绑定到类的任何实例的任务,为什么不使用常规函数呢?您可以使用非成员函数,这是很常见的。使用非成员函数和静态成员函数的主要区别在于,非成员函数只能访问类的公共成员(除非它被标记为朋友),而静态成员函数与所有成员函数一样,可以访问所有成员 class demo { public: int t; static int u; private: int v; static int w; public: static void f(const demo

如果函数只执行未绑定到类的任何实例的任务,为什么不使用常规函数呢?

您可以使用非成员函数,这是很常见的。使用非成员函数和
静态
成员函数的主要区别在于,非成员函数只能访问类的公共成员(除非它被标记为
朋友
),而
静态
成员函数与所有成员函数一样,可以访问所有成员

class demo {
public:
    int t;
    static int u;
private:
    int v;
    static int w;
public:
    static void f(const demo&);
};

void demo::f(const demo& d) {
    std::cout << d.t << '\n'; // okay: accessing public member
    std::cout << d.w << '\n'; // okay: member function accessing private member
    std::cout << demo::u << '\n'; // okay: accessing public member
    std::cout << demo::w << '\n'; // okay: member function accessing private member
}

void g(const demo& d) {
    std::cout << d.t << '\n'; // okay: accessing public member
    std::cout << d.w << '\n'; // error: non-member function accessing private member
    std::cout << demo::u << '\n'; // okay: accessing public member
    std::cout << demo::w << '\n'; // error: non-member function accessing private member
}
类演示{
公众:
int t;
静态INTU;
私人:
INTV;
静态int-w;
公众:
静态空位f(常数演示&);
};
void demo::f(const demo&d){

std::cout访问修饰符不适用于常规函数。常规函数无法访问静态类成员。添加到以前的注释中,还可以隐式为函数引入命名空间。此外,如果传递给静态回调函数“this”指针,则可以通过该点访问该类的私有成员呃(假设回调是该类的静态成员)@S.M.--正则函数可以访问任何公共类成员,包括公共静态成员。