分类: C/C++
2014-12-03 16:41:05
本人C++就只有大学课程那点基础,最近看淘宝开源的TFS,是用C++写的,借此机会也加强一下C++方面的知识。感觉C++的一些特性还是挺有趣的,刚开始会感觉比较晦涩,需要记的东西有点多,但只要多动手实践,把记忆变成理解,C++也不过是只是一门编程语言而已,克服自己的恐惧心理最为重要。
今天学习了一下“C++的常函数”,总结如下:
1. 定义成员变量时用关键字“mutable”修饰,可以突破const的限制。即常函数可对变量进行写操作,没有“mutable”修饰,编译会出错。
2. 如果成员变量是指针,常函数不可以改变指针的指向,但可以改变指针指向存储空间的内容。
下面直接看我写的测试代码吧,代码比文字更具描述性。
头文件:cpp_const.h
#ifndef _CPP_CONST_INCLUDE_
#define _CPP_CONST_INCLUDE_
#include
using namespace std;
class ConstTestClass
{
public:
ConstTestClass(int new_age, int new_weight);
~ConstTestClass();
int getAge() const;
void setAgeByPoint(int *new_age) const;
void setAge(int new_age) const;
int getWeight() const;
void setWeigth(int new_weight) const;
private:
int *age;
mutable int weight;
};
#endif
源文件:cpp_const.cpp
#include "cpp_const.h"
ConstTestClass::ConstTestClass(int new_age, int new_weight)
{
age = new int(new_age);
weight = new_weight;
cout << "ConstTestClass" <
}
ConstTestClass::~ConstTestClass()
{
delete age;
cout << "~ConstTestClass" << endl;
}
int ConstTestClass::getAge() const
{
return *age;
}
// 该函数编译出错,常函数不能改变指针变量的指向
void ConstTestClass::setAgeByPoint(int *new_age) const
{
age = new_age;
}
// 该函数编译成功,常函数可以改变指针变量指向的内存空间的值
void ConstTestClass::setAge(int new_age) const
{
*age = new_age;
}
int ConstTestClass::getWeight() const
{
return weight;
}
// 该函数编译成功,因为weight用mutable进行了修饰,已经突破了常函数的限制
void ConstTestClass::setWeigth(int new_weight) const
{
weight = new_weight;
}
int main(void)
{
cout << "main" << endl;
return 0;
}