[c++] 常成员函数

1.常成员函数声明:

const成员函数也就是常成员函数,它的声明形式:

返回类型 成员函数名(参数表) const ;
例如: int function(int x) const ;

易混淆的地方: const 的位置
》函数开头的 const 用来修饰函数的返回值,表示返回值是 const 的,也就是不能被修改,例如const char * getname()。
》函数头部的结尾加上 const 表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值,例如char * getname() const。

2.常成员函数的主要特点:

1)不能更新类的成员变量
2)不能调用该类中没有用const修饰的成员函数,即只能调用常成员函数
3)可以被类中其它的成员函数调用
4)常对象只能调用常成员函数,而不能调用其他的成员函数。

-------------------------------------------------例子1-----------------------------------------

class CDate
{

 public:
	 //常成员函数
	 int year() const{ return y; }
	 int month() const{
	    //m++;              //错误:1)常成员函数中不能更新类的数据成员
	 	return m;
	 }
	 //普通成员函数
	 int day(){return d++ ;}
	 int AddYear(int i){ return y+1; }
 
 private:
	 int y;
	 int m;
	 int d;
};



int main()
{

	 CDate const date;         //常对象
	 
	 //int day = date.day();   // 4)错误常对象不能调用非常成员函数
	 int year = date.year();   //正确
}

-------------------------------------------------例子2-----------------------------------------

class A{
private:
     int w,h;
 
public:
	int getValue() const{           //常成员函数
		return w*h + getValue2();   //2)错误。只能调用常成员函数。
	}

    int getValue2(){		     	//普通成员函数
        return w+h+getValue();      //3)正确。常成员函数可以被其它成员函数调用
    }
        
 	A(int x,int y){
 		w=x,h=y;
 	}
 	A(){}
 
};

3.其它注意事项

1)const关键字可以用于对重载函数的区分

class Calculate{
private:
     int x,y;
public:
     Calculate(){}
     Calculate(int a,int b)
     {
         x=a,y=b;
     }
    int calc() const   //常成员函数
    {
         return x*y; 
    }
 
     int calc(){      //函数名称相同的非常成员函数
         return x+y;
     }

};
 
void main()
{   
     Calculate const  a(2,3);  //常对象
     Calculate        b(2,3);  //普通对象
     cout<<a.calc();     //调用int calc() const;输出6
     cout<<b.calc();     //调用int calc() ;输出5
}

2)const是函数类型的一部分,在实现部分也要带const。

class Calculate{
private:
     int x,y;
public:
     Calculate(){}
     Calculate(int a,int b)
     {
         x=a,y=b;
     }
    int calc() const ;       //声明常成员函数

};
//类外定义(实现)
int Calculate::calc() const   //常成员函数
{
     return x*y; 
}

参考

《c++ Primer》
《c++ Primer》
https://blog.csdn.net/navymei10220214/article/details/82889125
https://blog.csdn.net/navymei10220214/article/details/82889125
hhttp://c.biancheng.net/view/2230.html
http://c.biancheng.net/view/2230.html
http://c.biancheng.net/view/2230.html
https://www.cnblogs.com/97-5-1/p/8665483.html
https://www.cnblogs.com/97-5-1/p/8665483.html
https://www.cnblogs.com/97-5-1/p/8665483.html
https://www.cnblogs.com/97-5-1/p/8665483.html

  • 66
    点赞
  • 285
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值