【C++面向对象】C++中成员函数的const属性
来源:互联网 发布:淘宝宝贝描述图片像素 编辑:程序博客网 时间:2024/05/21 09:07
下面主要对C++中关于成员函数的const属性进行讨论:
(1)形参为const
这里有的童鞋可能会产生疑问,print中为什么会返回了局部变量的引用类型,不是说函数中不能返回局部变量的引用或者指针吗?请参照【C++引用】const 引用的几点用法一文,
其实const int&可以延长局部变量地址的生存时间。在这种情况下我们只能用const int&接收print的返回值。
(3)this指针为const的形式,形如:
就会编译不通过:
需要注意的是,这种this指针为const的形式的成员函数将和this指针不是const形式的成员函数构成重载,也就是说下面两种形式的成员函数是重载关系,是可以在同一个类中共存的:
int& print()const;
int& print();
(1)形参为const
这种情况和普通函数的形参为const的形式类似,形如:
void print(const int& val);此时,在print函数的内部,不能修改val引用所指的值,当修改时编译器会报错误:
[Hyman@Hyman-PC const]$ g++ const.cpp const.cpp: In member function ‘void Myobj::print(const int&)’:const.cpp:14: 错误:increment只读引用‘val’(2)返回值为const的形式,形如下面代码中的:
const int& print(const int& val);
#include<iostream>using namespace std;class Myobj{ int m_i; int m_j; public: Myobj(int i,int j):m_i(i),m_j(j) { } const int& print(const int& val) { int k=400; int &rk=k; cout<<"val="<<val<<endl; return rk; }};int main(){ Myobj mb(100,200); int i=300; const int& ri = mb.print(i); cout<<"ri="<<ri<<endl; return 0;}
这里有的童鞋可能会产生疑问,print中为什么会返回了局部变量的引用类型,不是说函数中不能返回局部变量的引用或者指针吗?请参照【C++引用】const 引用的几点用法一文,
其实const int&可以延长局部变量地址的生存时间。在这种情况下我们只能用const int&接收print的返回值。
(3)this指针为const的形式,形如:
int& print()const;这种情况下是将print形参中包含的this指针声明为const的形式,this指针是const的,表示this指向的对象无法进行修改,也就是说改对象包含的字段无法进行修改,若修改
就会编译不通过:
[Hyman@Hyman-PC const]$ g++ const.cpp const.cpp: In member function ‘void Myobj::print() const’:const.cpp:14: 错误:increment of data-member ‘Myobj::m_i’ in read-only structure
需要注意的是,这种this指针为const的形式的成员函数将和this指针不是const形式的成员函数构成重载,也就是说下面两种形式的成员函数是重载关系,是可以在同一个类中共存的:
int& print()const;
int& print();
另外,如果实在需要在this指针为const的成员函数中修改成员变量,可以将需要修改的变量用mutable修饰,也就是:
mutable int m_i;
0 0
- 【C++面向对象】C++中成员函数的const属性
- c++const成员函数
- c/c++中const成员函数的返回值类型
- 【C++】const对象和const成员
- C++中类的const成员函数和const对象
- C++:面向行的类成员函数
- C++const对象 常量数据 常量成员函数 const指针 const引用
- Const---【const对象和const成员函数及const成员属性总结】
- C++:指向对象成员函数的指针
- 【C++】面向对象类成员函数的重载、覆盖与隐藏
- C++之const对象只能调用const成员函数---补充(18)《More Effective C++》
- C++:在成员函数后面放const的作用
- 高质量c++(const成员函数)
- 高质量c++(const成员函数)
- 高质量c++(const成员函数)
- 高质量c++(const成员函数)
- 第二遍C++primer->const成员函数
- c++const成员函数与mutable关键词
- OkHttp中的拦截器使用--翻译自官方文档
- pyton文件读写
- apt-get无法获取kubelet kubeadm kubectl包
- HBase详细介绍
- 解决:Cmake配置CGAL1.62.0出错
- 【C++面向对象】C++中成员函数的const属性
- Android 固定头部的ListView以及下拉刷新(附源码)
- 字体的应用
- Invalid bound statement (not found) 异常原因
- Android 根据EditText搜索框ListView动态显示数据
- Java SPI机制实践
- 《多线程编程》学习之二:Thread.currentThread()、isAlive()、Thread.sleep()的使用
- ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
- 如何卸载ninja?