- 作用:在该成员函数内无法修改数据成员,且不能调用非const成员函数。
- const 成员函数的基本定义格式
- 类内定义
- 类型 函数名(参数列表)const
{
函数体
}
- 类内声明,类外定义
- 类内声明:返回类型 函数名(参数列表)const
-
- 返回类型 类名::函数名(参数列表)const
{
函数体
}
*注意:内类声明和类外定义都需要加上const,否则编译器会认为不是同一个函数;
- 例子:
#include<iostream> using namespace std; class point { public: point(double x_val=0,double y_val=0); void print()const { //x = 5;这里会报错:试图修改数据成员x cout << "x:" << x << ",y:" << y; } ~point(); private: double x; double y; }; point::point(double x_val,double y_val):x(x_val),y(y_val) //参数不需要在使得x_val=0,y_val=0,否则会报错 { } point::~point() { } int main() { point p(20, 8); p.print(); return 0; }
扩展:const的用法
- const修饰基本数据类型
- const在函数种的应用
- const在类中的应用
- const修饰类对象,定义常量对象
一、const修饰基本数据类型
- 修饰一般变量和数组
- const int ==int const
- const int a=5 == int const a=5
- const int arr[3]={1,2,4} == int const arr[3]={1,2,4}
- 与指针相结合
- const int* ptr1= arr[3] == int const * ptr1=arr[3];
- 很好理解的读法(从右往左读):ptr1是一个指针,指向const int 类型或者 int const 类型,俩者都表示指针指向的变量的内容不能被改变。
- int* const ptr2=arr[3] ;
- 从右往左读:ptr2是一个const指针,指向int类型,表示指针指向不能被改变,但是指向的变量内容可以被改变。
- const int* const ptr3=test;
- 表示指针和指针指向的变量的内容都不能被改变,即ptr3只能指向变量test,且test的值不能改变。
- 与引用相结合
- int const &a=x ==const int &a=x;
- 和指针一样表示a是x的引用且a的值和x的值都是常量,不能被更新。
二、const应用到函数中
- 作为参数的const修饰符
- 作为函数返回值的const修饰符
- 作为中的成员函数,最前面说的那种
三、const在类中的用法(类中定义常量)
- 使用枚举类型定义常量
class test { enum{LEN1=10,LEN2=30}; int arr1[LEN1]; int arr2[LEN2]; };
- 使用const或static(*注意:c++11不允许在类声明中初始化static非const变量)
class test { public: test(int x_val=1,int y_val=1); int a = 5; const int b = 6; static const int c = 7; static int d=8; //error ~test(); private: int x; int y; }; int test::d = 8;//放在类定义之后 test::test(int x_val,int y_val):x(x_val),y(y_val) { } test::~test() { }
四、const修饰类对象(常量对象只能调用常量函数成员,别的函数不能调用)
class test { public: test():x(1) { y=2; } ~test() {} void set(int yy) { y=yy; } int getx() const { return x; } //protected: const int x; int y; }; void main() { const test t; t.set(33);//error t.getx(); } ———————————————— 版权声明:本文为CSDN博主「逝水-无痕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/wangkai_123456/article/details/76598917
*注:不能再类声明中初始化static的原因:
因为静态成员属于整个类,而不是属于某个对象,如果再类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。《c++ primer》里面说再类外定义和初始化时保证static成员变量只被定义一次的好方法。
五、使用const的建议
- const在函数/成员函数中的三种用法(参数,返回值,函数)要很好的使用;
- 不要轻易的将函数的返回值类型定义为const;
- 除了重载操作符外一般不要将返回值类型定义为某个对象的const引用(ostream& oprator<<(ostream& os,T& other))
int test::d = 8;//放在类定义之后
记录学习点滴,如有违规请告知。
今天的文章const函数的用法_实例成员函数分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/53721.html