类/指针/函数/this

来源:互联网 发布:内核源码的配置文件 编辑:程序博客网 时间:2024/05/18 12:37

这几个元素加一块,如果对其不是很理解,怕是看不懂源码。我们首先看三段代码:

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来指代该对象。至于在函数中什么时候用&,什么时候*还是参考上述的链接,而且我觉得很有必要在以后的笔记中记述这一点!

0 0
原创粉丝点击