首页 > 编程语言 > 详细

c++中的const(二)

时间:2020-08-29 13:52:02      阅读:62      评论:0      收藏:0      [点我收藏+]

一、const修饰函数

c++中const关键字除了修饰变量,指针等,还可以修饰函数,函数参数和函数的返回值。

在c++,通过const修饰类的成员函数,表明该成员函数不能修改对象的数据成员和调用非const修饰的函数。由于非const修饰的函数中可能会修改对象的数据成员,而const修饰的成员函数是不允许修改对象的数据成员的,因此const函数不能调用非const函数。

#include<iostream>
using namespace std;

class Test {
private:
    int a;
public:
    void set_val(int n)//set_val函数用来设置成员变量a的值,声明为const函数会报错
    {
        a = n;
    }

    int get_val() const  //get_val函数返回a的值,不需要修改a的值,可以声明为const,同时可以保护a的值不被修改
    {
        //a = 4;//函数内修改a的值则报错
        return a;
    }

}; 

int main()
{
    Test obj1;
    obj1.set_val(5);
    int val = obj1.get_val();
    cout << val << endl;
    return 0;
}

二、const修饰函数的参数

c++中利用const修饰成员函数的形参,可以防止传入的参数被函数内部逻辑修改,在参数类型为引用和指针时起作用,如果是传值,即使在函数内部修改了形参的值,对实参也不影响。

#include<iostream>
#include <string.h>
using namespace std;


class Test {
private:
    int a;
public:
    void set_val(const int n)//
    {
        //n = 20;//报错,const修饰形参,不能进行修改
        a = n;
    }

    void print_val()
    {
        cout << a << endl;
    }
    void str_cpy(const char *src, char *dst) 
    {
        if (src && dst)
        {
            strcpy_s(dst,strlen(src)+1,src);//注意使用strlen求字符串长度必须加上‘\0‘的空间
        }
    }

};

int main()
{
    Test obj1;
    obj1.set_val(5);
    obj1.print_val();
    char src[] = "test", dst[16] = { 0 };
    obj1.str_cpy(src, dst);
    cout << dst << endl;
    return 0;
}

在函数str_cpy中,源字符串使用const修饰,表示在函数体内不能修改源字符串指针所指内容,能够保护源字符串被误改。

同时:函数的参数使用const修饰时,既可以接收const修饰的同类型参数,也可以接收非const修饰的同类型的参数。

为了提高程序的效率,我们常常在传递参数时使用引用或指针,而传引用或指针存在安全隐患,为了保护实参的安全,可以使用const修饰需要保护的实参。

三、const修饰成员函数返回值

使用const修饰函数的返回指针或者引用,可以保护指针指向内容和引用内容不能被外部修改。

#include<iostream>
using namespace std;


class Test {
private:
    int a;
public:
    void set_val(const int n)//
    {
        a = n;
    }

    const int* get_val()//const修饰函数的返回值
    {
        return &a;
    }

};

int main()
{
    Test obj1;
    obj1.set_val(5);
    const int *n = obj1.get_val();
    //*n = 5;//报错
    cout << *n << endl;

    return 0;
}

 

c++中的const(二)

原文:https://www.cnblogs.com/cycit/p/13581008.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!