const常量成员函数


常量成员函数即为在类里定义为const的成员函数,使用这种函数有几个地方需注意


1.const对象、指向const对象的指针或引用只能用于调用其const成员函数,如果尝试用它们来调用非const成员函数,则会出错。


2.此函数的返回值不可以被修改。


3.此函数里的const改变了调用此函数的this形参指针的类型,意即this指针将是一个指向相应对象的const *类型的指针,所以不能对this所指对象(包括其成员变量)进行改变如赋值等操作,这里的改变包括那些会有副作用的操作,如调用map的下标操作([ ])。这就解释了为什么在const成员函数里不能使用map的下标。如果一定要修改,可以在map定义时在声明部分加上mutable 修饰符。


4.总之一句话,不要在const成员函数里做任何修改。

常量成员函数是C++中的一种特殊类型的成员函数,它被声明为 `const`,表示该函数不会修改对象的状态。换句话说,常量成员函数只能读取对象的数据成员,而不能修改它们。 ### 1. **常量成员函数的定义**: 常量成员函数通过在函数声明和定义的参数列表之后添加 `const` 关键字来实现。这表明该函数不会修改类的任何非静态数据成员。 ```cpp class MyClass { private: int value; public: MyClass(int v) : value(v) {} // 常量成员函数 int getValue() const { return value; // 只读取数据成员 } // 非常量成员函数 void setValue(int v) { value = v; // 修改数据成员 } }; ``` ### 2. **为什么需要常量成员函数?** - **保护对象状态**:当一个对象被声明为 `const` 时,只能调用它的常量成员函数。这样可以确保对象的状态不会被意外修改。 - **提高代码安全性**:通过将某些函数声明为 `const`,可以明确地告诉调用者这些函数不会改变对象的状态,从而提高代码的安全性和可读性。 ### 3. **常量成员函数的特点**: - **不能修改非静态数据成员**:常量成员函数不能修改类的任何非静态数据成员。 - **不能调用非常量成员函数**:常量成员函数不能调用同一个类中的非常量成员函数。 - **可以调用其他常量成员函数**:常量成员函数可以调用同一个类中的其他常量成员函数。 - **可以访问静态数据成员**:常量成员函数可以访问类的静态数据成员,因为静态数据成员不属于特定的对象实例。 ### 4. **代码示例**: ```cpp #include <iostream> using namespace std; class MyClass { private: int value; public: MyClass(int v) : value(v) {} // 常量成员函数 int getValue() const { return value; // 只读取数据成员 } // 非常量成员函数 void setValue(int v) { value = v; // 修改数据成员 } }; int main() { const MyClass obj(10); // 常量对象 // 调用常量成员函数 cout << "Value: " << obj.getValue() << endl; // 输出 10 // 下面这行代码会导致编译错误,因为 setValue 是非常量成员函数 // obj.setValue(20); return 0; } ``` ### 解释 常量成员函数的主要目的是确保对象的状态不会被修改。当你希望某个函数只读取对象的数据而不修改它时,使用 `const` 是一种很好的实践。此外,`const` 成员函数可以被常量对象调用,而普通成员函数则不能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值