c++成员函数后的const
来源:互联网 发布:周围神经炎知乎 编辑:程序博客网 时间:2024/05/19 00:43
以下的每一点会给出代码示例说明
一、c++成员函数后的const有以下特点:
1.隐含的this指针以const 类名的类型传递
2.const 只能声明成员函数,不能声明静态函数
(static函数不能有const修饰符,const 成员函数是包含this指针的,这明显不被static函数允许)
3.const 成员函数不能修改对象的任意非静态成员
4.const 成员函数不能调用非const 成员函数
二、另外,const对象与const成员函数相关的内容
1.由const 类名构造的对象只能调用 const方法
2.const对象的构造函数和析构函数无需用关键字const声明
1-1
//error C2662: “Text::print”: 不能将“this”指针从“const Text”转换为“Text &”#include "stdafx.h"#include "iostream"using namespace std;class Text{public: void printconst(void)const{cout<<"hello"<<endl;} void print(void){cout<<"hello"<<endl;}private: int k;};//上面定义了类Text的一常量对象int main(void){ a.printconst(); //ok a.print(); //error //上面a.print()调用是非法的 return 0;}
1-2
//error C2272: “printconst”: 静态成员函数上不允许修饰符#include "stdafx.h"#include "iostream"using namespace std;class Text{public: void static printconst(void) const{cout<<"hello"<<endl;} void print(void){cout<<"hello"<<endl;}private: int k;};int main(void){ Text a; a.printconst(); return 0;}
1-3
//error C2166: 左值指定 const 对象#include "stdafx.h"#include "iostream"using namespace std;class Text{public: void printconst(void) const{cout<<"hello"<<endl; k=1;} void print(void){cout<<"hello"<<endl;}private: int k;};int main(void){Text a; a.printconst(); return 0;}
而静态成员可以修改:
#include "stdafx.h"#include "iostream"using namespace std;class Text{public: void printconst(void) const{k=1000;cout<<k<<endl;} void print(void){cout<<"hello"<<endl;}private: static int k;};int Text::k=500;const Text a;int main(void){ a.printconst();//okcin.get(); return 0;}
输出:1000
1-4
//error C2662: “Text::print”: 不能将“this”指针从“const Text”转换为“Text &”#include "stdafx.h"#include "iostream"using namespace std;class Text{public: void printconst(void) const{cout<<"hello"<<endl;print();} void print(void){cout<<"hello"<<endl;}private: int k;};int main(void){Text a; a.printconst(); return 0;}
2-1
//error C2662: “Text::print”: 不能将“this”指针从“const Text”转换为“Text &”#include "stdafx.h"#include "iostream"using namespace std;class Text{public: void printconst(void) const{cout<<"hello"<<endl;} void print(void){cout<<"hello"<<endl;}private: int k;};const Text a;int main(void){ a.printconst();//oka.print();//error return 0;}
2-2
#include "stdafx.h"#include "iostream"using namespace std;class Text{public: void printconst(void) const{cout<<k<<endl;} void print(void){cout<<"hello"<<endl;}Text(){k=500; //修改成功}private: int k;};const Text a;int main(void){ a.printconst();//okcin.get(); return 0;}
输出: 500
0 0
- 成员函数后的const
- c++成员函数后的const
- c++const成员函数
- 关于在函数前加const 和成员函数后加const 的记录
- const用在成员函数后与成员函数前的区别
- 类成员函数后带const
- const用在成员函数后
- C++中成员函数后加const
- c/c++中const成员函数的返回值类型
- C++:在成员函数后面放const的作用
- 类成员函数 后加const和不加const 的区别
- const 之 const修饰的成员函数
- const成员函数的使用
- 类的 const 成员函数
- 成员函数后面的const
- 类的const成员函数
- 类的const成员函数
- const修饰的成员函数
- hdu 1176免费馅饼__变形的数塔问题
- Android 更新UI的两种方法——handler和runOnUiThread()
- 最小生成树kruskal算法
- 关于重构
- 网格布局(计算器界面设计)
- c++成员函数后的const
- 复杂网络的网址
- 回调函数
- 《C语言入门经典第四版 》笔记1
- STL源码学习总结及项目下载地址
- 图解:不连通流形
- 并查集
- cocos2d-x之怪物系统
- Android布局分析工具HierarchyView