這幾個元素加一塊,如果對其不是很理解,怕是看不懂源碼。我們首先看三段代碼:
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 & fun(int & 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來指代該對象。至於在函數中什麼時候用&,什麼時候*還是參考上述的鏈接,而且我覺得很有必要在以後的筆記中記述這一點!