鬼火狼烟吧 关注:230贴子:5,311
  • 9回复贴,共1

偶尔究究语法...

只看楼主收藏回复

class A{
public:
void change();
void change() const;
};
void A::change()const{cout<<"const\n";};
void A::change(){cout<<"normal\n";};
int main()
{
 A s;
 s.change();
 getch();
 return 0;
}

运行结果是:normal
大哥,在这种情况下,对象s似乎被只能用
void A::change(){cout<<"normal\n";}
这个函数了,怎么在不改变类定义的情况下,使得s能用到
void A::change()const{cout<<"normal\n";}
呢?
是不是const的那个被普通的那个遮蔽了,但按理也是const遮蔽别人的呀
想不明白,这应该涉及到编译器的实现问题了吧


IP属地:湖南1楼2006-05-29 15:44回复
    换了几次函数声明和定义顺序,结果还是一样的


    IP属地:湖南2楼2006-05-29 15:49
    回复
      2026-03-06 08:50:28
      广告
      不感兴趣
      开通SVIP免广告
      是不是但有a()和a()const同时在类中声明的
      const的那个无效?
      我猜的...


      IP属地:湖南3楼2006-05-29 15:53
      回复
        在一楼两个成员函数定义后多打了两个";",虽不影响什么,但还是要纠正一下,呵呵


        IP属地:湖南4楼2006-05-29 15:59
        回复
          唉唉,这些个东西在我学C++的时候根本就注意不到。。


          6楼2006-05-29 16:12
          回复
            常量对象只能调用常量成员函数,这个我是知道的
            只是感叹为什么一般对象就无法调用const的那个了呢(有非const定义存在的情况下)?

            呵呵,其实我的C++不是刚学的了,有空的时候就会看看,只是因为不是计算机专业的,所以一直没有很系统很深入地学习它,觉得现在只是学到了一点皮毛而已


            IP属地:湖南7楼2006-05-29 16:27
            回复
              拜倒,强!


              8楼2006-05-29 16:35
              回复
                最后可以通过强制类型转化无敌大法,这样来:: 

                ((const A)s).change(); 
                 
                其实还是要转换。。


                10楼2006-05-29 16:39
                回复
                  2026-03-06 08:44:28
                  广告
                  不感兴趣
                  开通SVIP免广告
                  不过我想这样的转换才体现了常函数的意义吧


                  11楼2006-05-29 16:40
                  回复
                    呵呵,这个“议题”讨论结


                    IP属地:湖南12楼2006-05-29 17:00
                    回复