Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1075616
  • 博文数量: 77
  • 博客积分: 821
  • 博客等级: 军士长
  • 技术积分: 1905
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-23 16:17
个人简介

学校:上海交通大学软件工程 学历:硕士 行业:从事流媒体移动开发 QQ: 412595942 邮箱:yiikai1987910@gmail.com

文章分类

全部博文(77)

文章存档

2016年(4)

2015年(15)

2014年(16)

2013年(12)

2012年(21)

2011年(9)

分类: C/C++

2013-01-23 10:32:49

今天遇到了const的老问题,一时卡住,现在重温后记下 

 先来看个例子: 

 class A { 

 public: 

 A():num(2) { } 

 ~A() { } 

 void setnum() const { num = 10; } 

 void getnum() const{ printf("%d\\n",num); } 

 private: 

 int num; 

}; 

int main() 

{ A b; 

 b.setnum(); 

 return 0; } 

可以注意到,编译以上这段代码会出现编译错误! 因为setnum函数被声明为const了,这样一来,在编译器的编译过程中,就将这个类方法中的影藏参数this转换成了const this,这样一来,自然就不能对类成员进行修改了。 现在在来看下返回值为const的函数有什么作用: 

class A
{
    public:
        A():num(2)
        {

        }
        ~A()
        {

        }
        void setnum()
        {
            num = 10;
        }
        void getnum() const{
            printf("%d\\n",num);
        }
    private:
        int num;
};

class B
{
    public:
        B()
        {

        }
        ~B()
        {

        }
        const A* get()
        {
            A *p = new A();
            return p;
        }
        
};

int main()
{
    B b;
    b.get()->getnum();
    b.get()->setnum();
    return 0;
}

现在我们通过类B的方法get()来获得一个类A的实体const对象 (这里有个概念我就不多少了,非const类型可以赋值给const类型,但反过来就不行了) ,你会发现程序也编不过,原因其实类似,const类型的对象,不能调用自身的非const成员函数,但是可以调用自己的const成员函数。 通过这两

阅读(13062) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~