類/指針/函數/this

這幾個元素加一塊,如果對其不是很理解,怕是看不懂源碼。我們首先看三段代碼:

1、定義:

#ifndef STOCK_H_

#define STOCK_H_

 

#include"stdafx.h"

#include<string>

 

class Stock

{

private:

    std::string company;

    int shares;

    double share_val;

    double total_val;

    void set_tot() { total_val = shares *share_val; }

public:

    Stock();        // default constructor

    Stock(const std::string & co, long n =0, double pr = 0.0);

    ~Stock();       // do-nothing destructor

    void buy(long num, double price);

    void sell(long num, double price);

    void update(double price);

    void show()const;

    const Stock & topval(const Stock & s)const;

};

 

#endif

 

2、實現

constStock & Stock::topval(const Stock & s) const

{

    if (s.total_val > total_val)

        return s;

    else

        return *this;

}

 

3、應用

const int STKS = 4;

int main()

{

// create an arrayof initialized objects

    Stock stocks[STKS] = {

        Stock("NanoSmart", 12, 20.0),

        Stock("Boffo Objects", 200,2.0),

        Stock("Monolithic Obelisks",130, 3.25),

        Stock("Fleep Enterprises",60, 6.5)

        };

 

    std::cout << "Stockholdings:\n";

    int st;

    for (st = 0; st < STKS; st++)

        stocks[st].show();

// set pointer tofirst element

    const Stock * top = &stocks[0];

    for (st = 1; st < STKS; st++)

{

        top = &top->topval(stocks[st]);

// now top points tothe most valuable holding

    std::cout << "\nMost valuableholding:\n";

top->show();

}

    // std::cin.get();

    return 0;

}

 

我們只需關注紅色的部分的代碼,這三個代碼最終的實現,就是按大小順序把三個對象的最終的total_val值排序顯示,如圖:


先看第一部分代碼:const Stock & topval(const Stock& s) const;

首先在Stock類裏,定義一個Stock &類型的的函數,同時傳遞Stock&類型的的參數,這裏我們可以對比定義int & funint & a)函數來理解這個函數的定義,即此函數傳遞一個一個Stock類的對象,返回的是Stock &類型的值。給一個參考鏈接來理解這裏的 &符號:http://blog.csdn.net/stpeace/article/details/40274553

再看第二段代碼的函數實現:

constStock & Stock::topval(const Stock & s) const

{

    if (s.total_val > total_val)

        return s;

    else

        return *this;

}

由於在類裏,函數的作用域爲該類,所以引用是:Stock::topval(),同時添加該函數的類型:const Stock &。(對比bool Stock::fun()形式,這裏的bool等價於constStock &功能),在函數裏,如果引用的對象裏的total_val大於該類的對象(該對象就是初始對象,在第三段代碼裏可以看到是stocks[0])就返回引用的對象,否則返回該對象,這裏用*this來指代該對象。至於在函數中什麼時候用&,什麼時候*還是參考上述的鏈接,而且我覺得很有必要在以後的筆記中記述這一點!

發佈了50 篇原創文章 · 獲贊 150 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章