首页 > 代码库 > 【ThinkingInC++】45、比较const和非const成员函数的例子

【ThinkingInC++】45、比较const和非const成员函数的例子

/**
* 书本:【ThinkingInC++】
* 功能:旧代码中的enum hack
* 时间:2014年9月10日08:35:13
* 作者:cutter_point
*/

#include<iostream>
#include<ctime>
#include<cstdlib>

using namespace std;

class Bunch
{
    enum {size=1000};
    int i[size];
};

int main()
{
    cout<<"sizeof(Bunch)="<<sizeof(Bunch)
        <<", sizeof(i[1000])="
        <<sizeof(int[1000])<<endl;


    return 0;
}








/**
* 书本:【ThinkingInC++】
* 功能:比较const和非const成员函数的例子
* 时间:2014年9月10日08:35:36
* 作者:cutter_point
*/

#include<iostream>
#include<cstdlib>   //里面有随机函数rand的头文件
#include<ctime>     //获取系统时间,为了更改随机数的种子机制

using namespace std;

/*
srand和rand()配合使用产生伪随机数序列。
rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,
rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,
每次调用rand函数生成的伪随机数序列都是一样的。
srand(unsigned seed)通过参数seed改变系统提供的种子值,
从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。
*/
class Quoter
{
    int lastquote;
public:
    Quoter();
    int lastQuote() const;
    const char* quote();
};

Quoter::Quoter()
{
    lastquote=-1;
    srand(time(0)); //更改随机数的种子
}

int Quoter::lastQuote() const    //这个const是为了使这个函数无法改变成员变量
{
    return lastquote;
}

const char* Quoter::quote()
{
    static const char* quotes[]=    //static const类型是:所有的对象共享且不变的数据。
    {
        "Are you having fun yet?",
        "Doctors always know best",
        "Is it ... Atomic?",
        "Fear is obscene",
        "There is no scientific evidence",
        "to support the idea",
        "that life is serious",
        "Things that make us happy, make us wise",
        "cutter_point"
    };
    const int qsize=sizeof(quotes)/sizeof(*quotes); //求得长度
    int qnum=rand()%qsize;  //rand()根据种子产生随机数

    while(lastquote >= 0 && qnum == lastquote)
        qnum=rand()%qsize;  //避免连续出现相同的数据

    return quotes[lastquote=qnum];

}

int main()
{
    Quoter q;
    const Quoter cq;
    cq.lastQuote();
    //! cq.quote(); //这个只是返回值是const的,但不是const函数

    for(int i=0 ; i<20 ; ++i)
        cout<<q.quote()<<endl;

    return 0;
}




【ThinkingInC++】45、比较const和非const成员函数的例子