真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++--函數(shù)對象的分析經(jīng)典問題

一.函數(shù)對象的分析

Q:客戶的需求
1.函數(shù)可以獲得斐波那契數(shù)列每項的值
2.每調(diào)用一次返回一個值
3.函數(shù)可根據(jù)需求重復(fù)使用

成都創(chuàng)新互聯(lián)公司于2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站建設(shè)、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元樟樹做網(wǎng)站,已為上家服務(wù),為樟樹各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792

for(int i=0;i<10;i++)
{
    cout<

代碼示例

#include 
#include 

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;
    }

    cout << endl;

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

    return 0;
}

輸出的結(jié)果如圖所示
C++--函數(shù)對象的分析  經(jīng)典問題
從代碼以及運行結(jié)果我們看到一些存在的問題
1.靜態(tài)局部變量處于函數(shù)內(nèi)部,外界無法改變
2.函數(shù)位全局變量,是唯一的,無法多次獨立使用
3.無法指定某個具體的數(shù)列作為初始值

解決方案:使用函數(shù)對象
1.使用具體的對象取代函數(shù)
2.該類的對象具備函數(shù)調(diào)用的行為
3.構(gòu)造函數(shù)指定具體數(shù)列項的起始位置
4.多個對象相互對立的求解數(shù)列項
函數(shù)的調(diào)用操作符C++--函數(shù)對象的分析  經(jīng)典問題
1.只能通過類的成員函數(shù)重載
2.可以定義不同參數(shù)的多個重載函數(shù)
代碼示例

#include 
#include 

using namespace std;

class Fib
{
    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;

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

    cout << endl;

    Fib fib2(10);

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

    return 0;
}

運行結(jié)果如圖所示
C++--函數(shù)對象的分析  經(jīng)典問題
從多次的運行結(jié)果可以看出,對之前存在的問題進行改正,完成了需求
小結(jié)
1.函數(shù)調(diào)用操作符C++--函數(shù)對象的分析  經(jīng)典問題是可以重載的
2.函數(shù)調(diào)用操作符只能通過類的成員函數(shù)重載
3.函數(shù)調(diào)用操作符可以定義不同參數(shù)的多個重載指針
4.函數(shù)對象用于在工程中取代函數(shù)指針

二.經(jīng)典問題分析

Q:關(guān)于賦值的疑問
1.編譯器為每個類默認重載了賦值操作符
2.默認的賦值操作符僅完成淺拷貝
3.當(dāng)需要進行深拷貝時必須重載賦值操作符
4.賦值操作符與拷貝構(gòu)造函數(shù)有相同的存在意義
代碼示例

#include 
#include 

using namespace std;

class Test
{
    int* m_pointer;
public:
    Test()
    {
        m_pointer = NULL;
    }
    Test(int i)
    {
        m_pointer = new int(i);
    }
    Test(const Test& obj)
    {
        m_pointer = new int(*obj.m_pointer);
    }

    void print()
    {
        cout << "m_pointer = " << hex << m_pointer << endl;
    }
    ~Test()
    {
        delete m_pointer;
    }
};

int main()
{
    Test t1 = 1;
    Test t2;

    t2 = t1;

    t1.print();
    t2.print();

    return 0;
}

運行結(jié)果如圖所示
C++--函數(shù)對象的分析  經(jīng)典問題
分析:在代碼中由于將t1賦值給t2,導(dǎo)致t1與t2指向的是同一個地址,而在使用完之后,對內(nèi)存進行釋放時對同一個地址釋放了兩次,這個操作在計算機內(nèi)部會造成錯誤
C++--函數(shù)對象的分析  經(jīng)典問題
Q:關(guān)于string的疑問
下面的代碼輸出是什么?

string  s="123456";
const char *p=s.c_str();
cout<

如上所示的代碼想完成的是在字符串123456后面添加abced
可實際的運行結(jié)果如圖所示
C++--函數(shù)對象的分析  經(jīng)典問題
分析
C++--函數(shù)對象的分析  經(jīng)典問題
小結(jié)
1.在需要進行深拷貝的時候必須重載賦值操作符
2.賦值操作符何拷貝構(gòu)造函數(shù)又同等重要的意義


網(wǎng)頁標題:C++--函數(shù)對象的分析經(jīng)典問題
URL分享:http://weahome.cn/article/gsphci.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部