码迷,mamicode.com
首页 > 其他好文 > 详细

保持const和non-const函数代码的一致

时间:2016-05-01 23:01:50      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

     在用C++进行面向对象编程的时候,有时需要在一个类里包含两个代码相似的函数,而它们之间的唯一区别是,一个为const类型,一个是non-const类型。

     此时如果将相同的代码写在两个函数中,则严重违反了DRT(Don‘t repeat yourself)原则。正确的做法是:让non-const函数引用const函数,如下所示:

class Sample
{
public:
	const char& doSomething()const
	{
		//there is some code to do
	}
	
	char& doSomething()
	{
		return const_cast<char&>  
		(static_cast<const Sample&>(*this).doSomething());
	}			
};

  在non-const的doSomething函数中,如果我们直接在里面调用doSomething函数,则编译器会默认你调用的是non-const版本的,那么程序就会陷入永无终止的递归中。为了防止这一点,应当首先利用static_cast操作符将该类的实例转化为const类型,此时再调用doSomething就是const的版本了。然后因为最终要返回non-const的char的引用类型,因此还需要用const_cast消除掉变量的const特性。这样一来,虽然代码的形式会比较丑陋,但实现了对代码重复利用的目标。

保持const和non-const函数代码的一致

标签:

原文地址:http://www.cnblogs.com/wickedpriest/p/5451342.html

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