C++ 常量成员常量返回值详解
总结:
1.常量数据成员,形式:const Type m_tData;
1)常量数据成员,需要在构造函数列表中给出,构造函数中可以用常量赋值,也可以实例化的时候赋值。
2)赋值函数中不能赋值,起到保护常量数据成员的作用,和友元作用相反。
2.常量成员函数,形式:type funname(type1 arg1,type2 arg2,...) const
1)常量成员函数,不能修改类数据成员,不能调用非常量函数。
2)常量成员函数的作用,可以有效的将类的函数分为可以修改类的函数,和不能修改类的函数;以后应该善于使用常量成员函数。
3.返回常量的函数,可以是常量指针,指针常量,常量,形式:
const type* funcname(type1 arg1,type2 arg2, ..)
type* const funcname(type1 arg1,type2 arg2, ..)
const funcname(type1 arg1,type2 arg2, ..)
他们的返回类型对于使用不是重要的,重要的是赋给的对象的类型决定了后续能够进行的操作。
常量指针和指针常量都可以赋值给常量指针对象,常量指针对象可以进行p++操作,不能进行*p操作。
常量指针和指针常量都可以赋值给指针常量,但是指针常量只能进行*p操作,不能进行p++操作。
普通类型的返回常量的函数,目的是为了让成员函数返回值之间不能进行运算,防止产生丑陋的代码,
返回值是常量的函数,说明该类内的这个值是外部使用者不能轻易改变的, 可以让类的声明的含义更加贴切,更加易于理解。
#include "stdafx.h" #include <iostream> using namespace std; class CTest { public: CTest(int nid, int nlimit):m_cntLimit(nlimit) { //m_cntLimit = nlimit;// 常量成员必须在构造函数列表在中给出 m_nId = nid; } ~CTest(){}; int GetID() const { //m_nId++;常量成员函数不能修改对象 //ClientGetObj();常量成员函数不能调用非常量成员函数 return m_nId; } CTest operator =(const CTest &b) { this->m_nId = b.m_nId; //this->m_cntLimit = b.m_cntLimit;// 常量数据成员不能拷贝 return (*this); } int ClientGetID() { return GetID(); } CTest* const GetObj() { return this; } CTest* ClientGetObj() { return this; } const int GetID() { return m_nId; } void Print() { cout<<"m_nId:"<<m_nId<<", const m_cntLimit"<<m_cntLimit<<endl; } void PrintCnt() const { cout<<"m_nId:"<<m_nId<<", const m_cntLimit"<<m_cntLimit<<endl; } private: int m_nId; const int m_cntLimit; }; void main() { CTest Obj1(1, 1000); CTest Obj2(2, 2000); CTest* pObj = Obj1.ClientGetObj(); pObj->Print(); CTest objTemp = *(Obj1.ClientGetObj()); *pObj = *(Obj2.ClientGetObj()); pObj->Print(); // reset *pObj = objTemp; cout<<"-------------const display---------------"<<endl; /*const */CTest* const pCntObj = Obj1.GetObj();//常量指针和指针常量都可以赋值给常量指针 pCntObj->PrintCnt(); *pCntObj = *(Obj2.GetObj()); pCntObj->PrintCnt(); /*const */int nid = pCntObj->GetID();// 常量返回值可以赋值给变量 nid++; cout<<"new nid is:"<<nid<<endl; //*pCntObj = *(Obj1.GetObj());// 常量指针对象,不能进行*p操作,可以进行p++操作 while(1); }
相关文章
- 这篇文章主要介绍了Java List集合返回值去掉中括号('[ ]')的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-29
- 这篇文章主要介绍了Feign接口方法返回值设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-08
- 这篇文章主要介绍了Postman动态获取返回值过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-30
- PHP是现在很多程序比较常用的软件,一些人在写php代码时候,会遇到需要返回值的情况。这里可以统一设置下返回值格式,下面文章就给大家介绍返回值设置实例,下面一起来看看。...2017-07-06
- 下在我们来看一篇关于PHP7扩展开发之传参与返回值的例子,希望这一篇文章能够帮助到各位朋友,具体的细节如下文介绍. 前言 这次,我们将演示如何在PHP扩展中接受传入的...2016-11-25
- 这篇文章主要介绍了详解C语言函数返回值解析的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C#打开php链接传参然后接收返回值的关键代码,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
asp.net EXECUTENONQUERY()返回值介绍
前些日子作一些数据项目的时候 在ADO.NET 中处理 ExecuteNonQuery()方法时,总是通过判断其返回值是否大于0来判断操作时候成功 。但是实际上并不是这样的,下面详细介绍一下,有需要的朋友可以参考...2021-09-22- 这篇文章主要介绍了Golang的func参数及返回值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-04
- 这篇文章主要介绍了C++ 常量成员常量返回值详解,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了Java Map.get()返回指定键所映射的值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-04
- 这篇文章主要介绍了Python函数返回值,实例分析了Python中返回一个返回值与多个返回值的方法,需要的朋友可以参考下...2021-10-22
- 这篇文章主要介绍了C# WebApi 接口返回值不困惑:返回值类型详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了使用C#代码获取存储过程返回值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了如何让C++函数返回值死心塌地为你工作,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下...2020-04-25
Windows API GetLastError()函数返回值含义解释
这篇文章主要介绍了Windows API GetLastError()函数返回值含义解释,本文罗列了所有错误代码及中文注释,需要的朋友可以参考下...2020-06-30- 这篇文章主要介绍了C++11获取线程返回值的实现代码,需要的朋友可以参考下...2020-04-25
ASP.NET―001:GridView绑定List、页面返回值具体实现
这篇文章主要介绍了ASP.NET―GridView绑定List、页面返回值具体实现,需要的朋友可以参考下...2021-09-22Java多线程之 FutureTask:带有返回值的函数定义和调用方式
这篇文章主要介绍了Java多线程之 FutureTask:带有返回值的函数定义和调用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-14C++11特性小结之decltype、类内初始化、列表初始化返回值
这篇文章主要介绍了C++11特性小结之decltype、类内初始化、列表初始化返回值,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-05-25