const函数总结(author:mingyuanonline#gmail.com)

2024-03-23 12:38

本文主要是介绍const函数总结(author:mingyuanonline#gmail.com),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/*                 const函数总结(author:mingyuanonline#gmail.com)
* 声明const成员函数,只需在函数参数表和函数体之间加const关键字即可(此句有改动,原始版本见原作者博客)
* 注意,我们只能对类成员函数这么做,对普通全局函数不能这么做。
* 仅当某个函数是类成员时,将其声明为const才有意义,其作用是使该函数中的this指针成为const,
* 这意味着我们不能在该函数的定义内在赋值语句左边写上类的数据成员——那将被编译器标记为错误。
* const成员函数不能调用同类的非const成员函数,因为那样也有可能修改当前对象。
* 当我们将某个对象声明为const之后,该对象可以调用的成员函数也都必须是const,否则程序将不能编译。
* 注:以上参考http://blog.csdn.net/lidh04/archive/2008/07/27/2720309.aspx
*
* 总结一下即:
* 0.声明const成员函数,只需在函数参数表和函数体之间加const关键字即可
* 1.const函数声明只在类中有意义只能出现在类中,作为类的成员函数
* 2.const成员函数函数只能调用const成员函数
* 3.非const函数可以调用const成员函数
* 4.非const对象可以调用const成员函数
* 5.const对象只能调用const成员函数
* 6.const对象可以访问静态成员函数
*/
#include
#include
using namespace std;
class class_const_member_function
{
public:
   class_const_member_function(string name="no name"):_name(name){};
   string display(){return _name;}//非const成员函数
   void display_const(string name)const{cout< < //void const_try_to_modify_member_variable()const{_name="99";}//const成员函数试图修改成员变量,出错!
   void const_call_const()const{display_const("const_call_const");}//const成员函数调用const成员函数
   //void const_call_nono_const_function()const{display();}//const函数调用非const,出错!
   void nono_const_call_const(){display_const("nono_const_call_const");}//非const成员函数调用const成员函数
   static void print(string whos){cout< <<"'s "<<_school<
private:
   string _name;
   static string _school;
};
string class_const_member_function::_school("school");
void const_member_function_test()
{
   class_const_member_function mem;//声明一个非const对象
   cout< < mem.display_const("name");//非const对象调用const成员函数
   mem.print("mem");
  
   const class_const_member_function const_mem;//声明一个const对象
   const_mem.display_const("const_name");//const对象调用const成员函数
   //const_mem.display();//const对象调用非const成员函数,出错!
   const_mem.print("const_mem");//const对象访问静态成员函数
  
   class_const_member_function::print("class");//类名调用静态函数
  
}

这篇关于const函数总结(author:mingyuanonline#gmail.com)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/838343

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)