c语言的成员函数,C++常量成员函数

本文详细解释了C++中const关键字的作用,如何通过const修饰形参确保函数不会修改传入的对象,以及在成员函数中使用const的意义。通过实例说明了const在保护隐式this参数和保持一致性编译中的重要性。
摘要由CSDN通过智能技术生成

通过引用或通过指针传递给函数的形参可能会被该函数修改。但是如果在形参中使用 const 关键字,则可以防止调用的函数修改它。

例如,某个函数的声明如下:

void fun (const string &str);

该函数釆用了一个字符串对象的引用作为形参,但不能修改该对象。有一个类似的机制,可以用来保护隐含的形参 *this,使它不会被成员函数修改。当定义成员函数时,可以在形参列表后面放置 const 关键字,这实际上就是告诉编译器,该成员函数未被允许修改其对象。如果成员函数定义在类外面,则类内的声明和类外的定义都必须具有 const,示例如下:

class ConstExample

{

int x;

public:

ConstExample(int a){ x = a;}

void setValue(int);

int getValue() const;

};

getValue 函数定义语句应如下:

int ConstExample::getValue() const

{

return x;

}

具有常量形参 X 的函数无法转向,并将 X 作为非常量形参传递给另一个函数。换句话说,承诺不修改 X 的函数不能将X传递给另一个函数,除非第二个函数也承诺不修改 X。这种情况有时也可能会以不明显的方式发生。

以下程序使用带有常量形参的函数来打印数组的第一个元素,但是它不会编译,因为它在 const 的使用方面不一致:

#include

using namespace std;

class K

{

public:

void output () // 丢矢了 const

{

cout << "Output of a K object" << endl;

}

};

void outputFirst(const K arr[])

{

arr[0] .output ();

}

int main(int argc, char** argv)

{

K arr [] = { K() };

outputFirst(arr);

return 0;

}

该程序之所以不能编译,是因为编译器不能保证 const 数组的元素在作为隐含的 this 形参传递给 output 成员函数时不会被修改:

arr[0].output();

要让该程序可以编译,则可以使 output() 成员函数变成一个 const 成员函数,以表示它有一个作为常量的 this 形参,示例如下:

class K

{

public:

void output() const

{

cout << "Output of a K object" << endl;

}

};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值