簡體   English   中英

非靜態函數c ++還剩下什么?

[英]What's left for non-static functions c++?

這些天,我的代碼中發生了一些奇怪的事情。 每次必須構建新的成員函數時,或者每次返回到先前定義的成員函數時,我都認為:

“嘿,無論這個類的哪個實例正在調用它,這都是完全相同的過程,所以讓我們使其靜態!”

而且我還覺得這樣會減少內存消耗,因為每個實例都不必“執行”該函數的一個實現,對嗎?

因此,不要像這樣:

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)更具可讀性

調用非靜態函數時。

Foo foo;
foo.doSomething(ArgType arg1, ArgType2 arg2,...);

編譯到。

Foo foo;
doSomething(&foo, ArgType arg1, ArgType2 arg2,...);

在這里回答了有關Java的類似問題,但是兩種語言的想法都是相同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM