常函数的意义对与普通函数来说,因为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;
总结 ,常函数具有保护类成员的作用。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。