注册 登录
编程论坛 C++教室

[求助]求助, 问一个关于const很弱的问题

abc911 发布于 2007-05-02 01:51, 471 次点击

#include <iostream>
using namespace std;

class mytime
{
    public:
        mytime(int h = 0, int m = 0);
        void gettime(int& h, int& m) const;
        //
        mytime operator+(int min) const;
        
        bool operator==(const mytime& t) const;
    private:
        int hour;
        int minute;
};



mytime::mytime(int h, int m) :
    hour(h), minute(m)
{}
   
void mytime::gettime(int& h, int& m) const{
    h = hour;
    m = minute;
}
///////////////////////////////////////////////////////////////////
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mytime mytime::operator+(int min) const
{
    mytime tmp(0,0);
   
    tmp.minute = hour*60 + minute + min;
   
    tmp.hour = tmp.minute / 60;
    tmp.minute %= 60;
   
    return tmp;
}




//== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == ==
bool mytime::operator==(const mytime& t) const
{
    if(t.hour == hour && t.minute == minute) return true;
        else return false;
}


int main(){
    int hh, mm;

    mytime a(12, 20);
   
    mytime b;
   
    b=a+100;
   
    b.gettime(hh,mm);
    cout << hh << \":\" << mm;

}

bool mytime::operator==(const mytime& t) const

在这一行中有两个const, 我知道第一个const表示 mytime& t的t是不能更改的意思,但是第二个const是什么意思呢, 如果去掉地2个const会有什么不好呢?



7 回复
#2
天下第二刀2007-05-02 10:43

顶下~

[此贴子已经被作者于2007-5-2 10:59:42编辑过]

#3
天下第二刀2007-05-02 11:05
  这个应该是不能修改类对象的数据成员的值

[此贴子已经被作者于2007-5-2 22:19:39编辑过]


#4
yushui2007-05-02 12:29
函数原型和定义被指定为const ,不能修改对象
#5
aipb20072007-05-02 23:59
第2个const表示const成员函数,它是修饰this指针的。

简单的说:如果不加这个const修饰,那么this是非const的(classType *this),意味着非const类对象可以调用该函数,但是const对象不能。
加上const修饰,那么this是const的(const classType *this),意味着const或者非const的类对象均可调用该函数。

这样的行为本质是因为可以用非const对象初始化const对象,但是不能用const对象初始化非const对象!

[此贴子已经被作者于2007-5-3 8:43:30编辑过]

#6
yushui2007-05-03 08:25
可以用非const对象初始化const对象,但是
不能用非const对象初始化const对象
一样的哦
#7
aipb20072007-05-03 08:43

改过来了,不细心,呵呵

#8
未入流小菜鸟2007-05-03 21:28

学习了。

拿点积分,闪人。

1