学校:上海交通大学软件工程 学历:硕士 行业:从事流媒体移动开发 QQ: 412595942 邮箱:yiikai1987910@gmail.com
分类: 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成员函数。 通过这两