const函数的用法_实例成员函数

const函数的用法_实例成员函数作用:在该成员函数内无法修改数据成员,且不能调用非const成员函数。 const 成员函数的基本定义格式 类内定义 类型 函数名(参数列表)const { 函数体 } 类内声明,类外定义 类内声明:返回类型 函数名(参数列表)const 返回类型 类名::函数名(参数列表)const { 函数体

const函数的用法_实例成员函数"

  • 作用:在该成员函数内无法修改数据成员,且不能调用非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的用法

  1. const修饰基本数据类型
  2. const在函数种的应用
  3. const在类中的应用
  4. 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

(0)
编程小号编程小号
上一篇 2023-08-30
下一篇 2023-08-30

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注