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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值