c++ - 非静态函数 C++ 还剩下什么?

标签 c++ function static instance member

最近我的代码中发生了一些奇怪的事情。每次我必须构建一个新的成员函数,或者每次我回到以前定义的成员函数时,我想:

“嘿,无论这个类的哪个实例调用它,这都将是完全相同的过程,所以让我们让它成为静态的!”

而且我还觉得它会减少内存消耗,因为每个实例都不必“携带”该函数的一个实现,对吗?

所以不要有这样的东西:

class Foo
{
    int _attributes;

    double methods(int parameters)
    {
        // do stuff using..
    _attributes;

    };
};

我最终得到的结果是:

class Foo
{
    int _attributes;

    static double methods(int parameters, Foo* instance)
    {
        // do stuff using..
    instance->_attributes;

    };
};

而且我再也看不到任何不会以这种方式转换的函数。 所有 我的函数都变成了静态的,我觉得某处有问题..

我错过了什么?拥有非静态方法又有什么用呢? XD

最佳答案

恭喜您重新创建了 C 面向对象编程。这正是我们在 C 中实现 OOP 的方式。事实上,C++ 也是如此。它向每个名为 this 的函数添加一个参数,该参数与其余参数一起推送。你正在明确地做同样的事情。

为什么要改用成员函数?可读性。 myInstance.foo()myClass::foo(all, my, parameters, myInstance)

更具可读性

关于c++ - 非静态函数 C++ 还剩下什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24103864/

相关文章:

c++ - 测试多边形是否弱简单

c++ - 我如何知道 HANDLE 对象是否已初始化?

c++ - 上下文菜单不显示

c 指针,如何将它/它们释放到一个函数中

c++ - 我应该怎么做才能访问对象的成员变量?

c++ - 将字符串数组传递给函数

javascript - Node.JS - 在另一个函数中调用预定义函数

java - 重新定义派生类中的静态成员。 java

PHP:静态和非静态函数和对象

java - 保留对 Locale 实例的静态引用好吗?