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

标签 c++ oop

如果函数只是执行不绑定(bind)到类的任何实例的工作,为什么我们不只使用常规函数呢?

最佳答案

您可以使用非成员函数,这很常见。使用非成员函数和static成员函数之间的主要区别在于,非成员函数只能访问类的公共(public)成员(除非它被标记为friend) code>),并且一个 static 成员函数,像所有成员函数一样,可以访问所有成员。

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
}

关于c++ - 在C++中,为什么使用静态类函数而不是常规函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59238635/

相关文章:

c++ - std::basic_fstream 和 std::unique_lock 的接口(interface)设计

c++ - 如何使用 OCCI 获取 VARCHAR2(n) 限制?

java - 在JAVA中实例化一个抽象类?

c - 我将如何 'spawn' 或按程序实例化多个生物?

objective-c - 类和父类(super class)之间的双向通信

c++ - C++ 标准是否保证统一初始化是异常安全的?

c++ - 按值或右值引用接受仅移动参数

c++ - 具有#define值的std::compare_exchange int

oop - TILED 编辑器 - 对象放置可以对齐到对象层中的网格吗?

ruby - 如何检查类是否正确实例化