Chinaunix首页 | 论坛 | 博客
  • 博客访问: 111365
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 244
  • 用 户 组: 普通用户
  • 注册时间: 2014-12-02 11:07
个人简介

联系方式:825988516@qq.com 业精于勤荒于嬉 行成于思毁于随

文章分类
文章存档

2014年(12)

我的朋友

分类: 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;

}

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