常函数的意义对与普通函数来说,因为const关键字的增加,体现在对类成员的保护上,现在加以讲解:
#include <iostream> using namespace std; class Ctest { private: int a; public: Ctest( int a = 2) { this->a = a; } int doubleA() const { return a*2; } }; int main() { Ctest * cts = new Ctest(2); cout << cts->doubleA() << endl; delete cts; return 0; }
结果:
常函数->
int doubleA() const 就是在函数后加const
需要注意的是 :
①:构造函数和析构函数不可以是常函数
②:常函数不能对class的类成员进行修改(只能调用)如下面是不可以的:
但是可以对本函数内部声明的参数进行修改
③:常函数的this指针,有别于普通函数的this指针
#include <iostream> using namespace std; class Ctest { private: int a; public: Ctest( int a = 2) { this->a = a; } int doubleA() const { return a*2; } const Ctest* my() const { return this; } Ctest* my1() { return this; } }; int main() { /*Ctest * cts = new Ctest(2); cout << cts->doubleA() << endl; delete cts;*/ Ctest cts(3); cout << cts.my()->doubleA() << endl; return 0; }
这里有个注意点:常对象只能调用常对象,如下面是不允许的:
另外 :
#include <iostream> using namespace std; class Ctest { private: int a; public: Ctest( int a = 2) { this->a = a; } int doubleB() { return a*2; } int doubleA() const { return a*2; } const Ctest* my() const { return this; } Ctest* my1() { return this; } }; int main() { /*Ctest * cts = new Ctest(2); cout << cts->doubleA() << endl; delete cts;*/ const Ctest cts(3); cout << cts.doubleA() << endl; return 0; }
用 const Ctest cts(3) 也是定义常对象
当然,下面的方案也行:
const Ctest * cts = new Ctest(3); cout << cts->doubleA() << endl;
总结 ,常函数具有保护类成员的作用。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。