35_函數(shù)對(duì)象分析

0.需求

  • 編寫(xiě)一個(gè)函數(shù):
    1. 函數(shù)可以獲得斐波拉契數(shù)列每項(xiàng)的值
    2. 每調(diào)用一次返回一個(gè)值
    3. 函數(shù)可根據(jù)需要重復(fù)使用

編程說(shuō)明:第一個(gè)解決方案

#include <iostream>

using namespace std;

int fib()
{   
    static int a0 = 0;
    static int a1 = 1;
    
    int ret = a1;
    
    a1 = a0 + a1;
    a0 = ret;
    
    return ret;
}


int main()
{
    for(int i=0; i<10; i++)
    {
        cout << fib() << endl;
    }
    
    cout << endl;
    
    for(int i=0; i<5; i++)  
    {
        cout << fib() << endl;
    }

    return 0;
}

輸出結(jié)果:

1
1
2
3
5
8
13
21
34
55

89
144
233
377
610
  • 問(wèn)題:函數(shù)一旦開(kāi)始調(diào)用就無(wú)法重來(lái)
    • 靜態(tài)局部變量處于函數(shù)內(nèi)部,外界無(wú)法改變
    • 函數(shù)為全局函數(shù),是唯一的,無(wú)法多次獨(dú)立使用
    • 無(wú)法指定某個(gè)具體的數(shù)列項(xiàng)作為初始值

1. 解決方案

  • 函數(shù)對(duì)象
    • 使用具體的類對(duì)象取代函數(shù)
    • 該類的對(duì)象具備函數(shù)調(diào)用的行為
    • 構(gòu)造函數(shù)指定具體數(shù)列項(xiàng)的起始位置
    • 多個(gè)對(duì)象相互獨(dú)立的求解數(shù)列項(xiàng)
  • 函數(shù)調(diào)用操作符(()
    • 只能通過(guò)類的成員函數(shù)重載
    • 可以定義不同參數(shù)的多個(gè)重載函數(shù)
      編程說(shuō)明:最終解決方案
#include <iostream>

using namespace std;

class Fib
{
private:
    int a0;
    int a1;
public:
    Fib()
    {
        a0 = 0;
        a1 = 1;
    }

    Fib(int n)
    {
        a0 = 0;
        a1 = 1;

        for(int i=2; i<=n; i++)
        {
            int t = a1;
            
            a1 = a0 + a1;
            a0 = t;
        }
    }

    int operator () ()
    {
        int ret = a1;

        a1 = a0 + a1;
        a0 = ret;

        return ret;     
    }
};

int main()
{
    Fib fib;

    for(int i=0; i<10; i++)
    {
        cout << fib() << endl;
    }
    
    cout << endl;
    
    Fib fib2(5);

    for(int i=0; i<5; i++)  
    {
        cout << fib2() << endl;
    }

    return 0;
}

輸出結(jié)果:

1
1
2
3
5
8
13
21
34
55

5
8
13
21
34

2. 小結(jié)

  • 函數(shù)調(diào)用操作符(())是可以重載的
  • 函數(shù)調(diào)用操作符只能通過(guò)類的成員函數(shù)重載
  • 函數(shù)調(diào)用操作符可以定義不同參數(shù)的多個(gè)重載函數(shù)
  • 函數(shù)對(duì)象用于在工程中取代函數(shù)指針
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容