码迷,mamicode.com
首页 > 编程语言 > 详细

C++ this与const,const_cast,static_cast的关系

时间:2014-06-04 23:17:34      阅读:415      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   a   

一、整体代码

#include <iostream>

using namespace std;
class CCTest {
public:
   void setNumber( int );
   void printNumber() const ;
private:
   int number;
};

void CCTest::setNumber( int num ) { number = num; }

void CCTest::printNumber() const {
   cout << "\nBefore: " << number;
   const_cast< CCTest * >( this )->number--;
   cout << "\nAfter:" << number;
}

int main() {
   CCTest X;
   X.setNumber( 8 );
   X.printNumber();
   cout << "\n" <<endl;
}

二、运行结果如下:

bubuko.com,布布扣


三、解释

      如果方法声明为const,那么实现的时候一定要加上const。

      在const方法中this 指针的数据类型为 const CCTest *,只能调用const的方法和成员变量。

      如果想调用非const的方法和成员变量,那么就要const_cast< CCTest * >( this ),其中this类型为const CCTest* ,改变后为CCTest*,就可以使用非const的方法和成员变量了。

      在非const方法中this指针的数据类型为CCTest *可以调用所有的方法和成员变量。如果一个方法同时有const和非const版本,优先调用非const版本。

      

四、static_const

RefBase* RefBase::weakref_type::refBase() const
{
    return static_cast<const weakref_impl*>(this)->mBase;
}

      如果在const方法中,由于this为const RefBase::weakref_type类型,转换为子类const RefBase::weak_impl类型。

RefBase* RefBase::weakref_type::refBase() 
{
    return static_cast<weakref_impl*>(this)->mBase;
}
      如果没在const方法中,由于this为RefBase::weakref_type类型,转换为子类RefBase::weak_impl类型。

C++ this与const,const_cast,static_cast的关系,布布扣,bubuko.com

C++ this与const,const_cast,static_cast的关系

标签:c   style   class   blog   code   a   

原文地址:http://blog.csdn.net/jltxgcy/article/details/27173645

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!