const成员函数及const
来源:互联网 发布:多线程编程书籍 编辑:程序博客网 时间:2024/04/30 13:12
在成员函数参数列表后面加上const,表示该成员函数是const成员函数。这里的const是修饰this指针的类型。
默认情况下,this的类型是指向类类型对象的常量指针,即指针本身是常量,但指针所指的对象不是常量。
在下面例子中,this的类型是conClass *const,默认情况下不能把this绑定到一个常量对象上。这样使我们不能在一个常量对象上调用普通的成员函数。
如果成员函数不改变this所指对象,应该把this声明成const conClass *const。
#include<iostream> #include <string>#include <vector>using namespace std;class ConClass{private:int idata;string sdata;public:ConClass(int a,string b) {idata = a;sdata = b;}void print() const{ //const成员函数,只能被常量对象,常量对象的引用或指针调用cout << idata << " " << sdata << endl;}void setData(int _idata, string _sdata) //要修改对象,不能为const成员函数{idata = _idata;sdata = _sdata;}};int main(){const ConClass *myConst1 = new ConClass(2, "test");const ConClass myConst2(3, "TEST");//myConst1->setData(0, "NULL");//错误//myConst2.setData(0, "NULL"); //错误myConst1->print();return 0;}注意:const成员函数,只能被常量对象,常量对象的引用或指针调用。
构造函数不能被声明为const,当我们创建一个const对象时,知道构造函数完成初始化过程,对象才能真正取得其“常量”属性。
mutable关键字可以修改某个数据成员,即使在一个const成员函数内。
class ConClass{private:int idata;string sdata;mutable int mdata; //mutable关键字使得该变量在const成员函数中可以被修改public:ConClass(int a, string b) {idata = a;sdata = b;}void print() const{ //const成员函数,只能被常量对象,常量对象的引用或指针调用 cout << idata << " " << sdata << endl;}void setData(int _idata, string _sdata) //要修改对象,不能为const成员函数 {idata = _idata;sdata = _sdata;}void change(int _mdata) const{mdata = _mdata; //可以修改}};
const成员函数返回类引用应该是const类型的引用。
const ConClass& print() const{ //前面的const不能少return *this; //}
通过区分成员函数是否是const的,可以对其进行重载
#include<iostream> #include <string>#include <vector>using namespace std;class ConClass{private:int idata = 0;string sdata = "NULL";public:ConClass(int a, string b) {idata = a;sdata = b;}ConClass(){}ConClass &display(std::ostream &os){doDisplay(os);return *this;}const ConClass &display(std::ostream &os) const{//后面const不能少,否则不能形成重载doDisplay(os);return *this;}private:void doDisplay(std::ostream &os) const{os << idata << " " << sdata << endl;}};int main(){const ConClass myConst1;ConClass myConst2(3, "TEST");myConst1.display(cout); //调用const版本myConst2.display(cout); //调用非const版本return 0;}
补充:const指针
const如果在*左边,表示指针指向的内容不可修改,const如果在*右边,表示指针本身不可修改。
比如const char* keyword表示指针指向的对象是const char,是不可修改的。
那么const char* const *keyword;表示的含义呢?
很简单,可以这样看(const char *) const * keyword;是一个二级指针。第二个const表示这个二级指针指向的对象是不可修改的(const char *),但是二级指针本身可以修改。
#include <iostream>using namespace std;int main(){const char *const *keywords;const char *p = "hello world!\n";keywords = &p; //可以修改cout << p << *keywords;return 0;}
0 0
- const成员函数及const
- Const---【const对象和const成员函数及const成员属性总结】
- const对象const成员函数
- this指针及const成员函数
- const成员函数
- const成员函数
- const 成员函数
- c++ const 成员函数
- 关于const成员函数
- const成员函数简介
- const 成员函数
- c++ const成员函数
- c++ const成员函数
- c++ const 成员函数
- c++const成员函数
- const成员函数
- const成员函数
- const成员函数
- 我的信仰
- 【寄语2016】—不乱脚步,不慌流年
- [DevExpress]skin窗体换肤
- ios app上架后在AppStore中搜索不到的相关问题
- 第一次使用Android Studio gradle项目构建(3)
- const成员函数及const
- tomcat内存
- 如何跳到系统设置里的各种设置界面
- 聊聊并发-Java中的Copy-On-Write容器
- Android测试方法总结汇总
- iOS 使用AudioRecorder录音后在使用AVPlayer播放不了声音的问题
- easyUI问题记录
- 欢迎使用CSDN-markdown编辑器
- Python subprocess模块总结