[c++] 常成员函数
常成员函数声明:返回类型成员函数名(参数表)const;例如:intfunction(int x)const;常成员函数的主要特点:1)不能更新类的成员变量2)不能调用该类中没有用const修饰的成员函数,即只能调用常成员函数3)可以被类中其它的成员函数调用4)常对象只能调用常成员函数,而不能调用其他的成员函数。例子1:cla...
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
更多推荐
所有评论(0)