重载成员函数的常成员函数版本
2013-11-12 22:58
204 查看
首先,复习一下const的用法
(1)const是函数类型的一部分,在实现部分也要带该关键字。
(2)const关键字可以用于对重载函数的区分。
(3)常成员函数不能更新类的成员变量,也不能调用该类中没有用const修饰的成员函数,只能调用常成员函数和常数据成员。
重点是第二条,const可以用来重载函数
它的效果很简单,如果类的实例是const的,就一定要为要调用的函数重载相应的const版本
否则
就会破坏实例的const性质(普通成员函数可以改变对象里的成员)
而且const实例里面的this指针也是const的,在调用了一般的函数之后返回的是一个普通的this指针,相当于要把原来的
const this改成非const的
编译器肯定不会同意的。。。
测试代码:
(1)const是函数类型的一部分,在实现部分也要带该关键字。
(2)const关键字可以用于对重载函数的区分。
(3)常成员函数不能更新类的成员变量,也不能调用该类中没有用const修饰的成员函数,只能调用常成员函数和常数据成员。
重点是第二条,const可以用来重载函数
它的效果很简单,如果类的实例是const的,就一定要为要调用的函数重载相应的const版本
否则
就会破坏实例的const性质(普通成员函数可以改变对象里的成员)
而且const实例里面的this指针也是const的,在调用了一般的函数之后返回的是一个普通的this指针,相当于要把原来的
const this改成非const的
编译器肯定不会同意的。。。
测试代码:
#include<iostream> using namespace std; class Test { public: int& fun1(int &a) { cout<<"fun1"<<endl; return a; } //const int& fun1(int &a)const //{ // cout<<"fun1 const"<<endl; // return a; //} }; int main() { Test t; Test const t1; int a = 10; t.fun1(a); t1.fun1(a);//这里会报错 :error C2662: “Test::fun1”: 不能将“this”指针从“const Test”转换为“Test &” return 0;
相关文章推荐
- 常量对象、常量成员函数、常量成员函数的非常量重载版本。
- c++类成员函数重载常量与非常量版本时避免代码重复的一种方法
- 成员函数的重载、覆盖和隐藏的区别与联系
- C++类的常成员函数以及静态成员函数
- 高质量C++成员函数的重载、覆盖与隐藏
- C++中成员函数的重载、覆盖与隐藏
- 运算符-重载为成员函数 和友元函数的区别.
- 在 const 和 non-const 重载的成员函数中避免代码重复
- C++运算符重载(成员函数方式)
- 成员函数的多态,重载,隐藏
- 十七、运算符重载(一) 成员函数重载、友元函数重载、运算符重载规则
- C++成员函数的重载、覆盖与隐藏
- 成员函数的重载覆盖和隐藏
- C++成员函数的 重载、隐藏、覆盖分析
- 类成员函数的重载、覆盖和隐藏区别?
- 类的const和非const成员函数的重载
- 类成员函数的重载、覆盖和隐藏区别
- C++ 成员函数的重载与覆盖与隐藏
- c++成员函数的重载、覆盖、隐藏区别
- C++程序设计语言练习11.4 算术运算符重载的类成员函数写法