常函数的意义对与普通函数来说,因为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;
总结 ,常函数具有保护类成员的作用。
转载于:https://blog.51cto.com/aonaufly/1922882