资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

C++常函数

常函数的意义对与普通函数来说,因为const关键字的增加,体现在对类成员的保护上,现在加以讲解:C++ 常函数

做网站、成都做网站,成都做网站公司-创新互联公司已向上千家企业提供了,网站设计,网站制作,网络营销等服务!设计与技术结合,多年网站推广经验,合理的价格为您打造企业品质网站。

#include 
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;
}

结果:

C++ 常函数

常函数->

int doubleA() const    就是在函数后加const

需要注意的是 :

①:构造函数和析构函数不可以是常函数

②:常函数不能对class的类成员进行修改(只能调用)如下面是不可以的:

C++ 常函数

但是可以对本函数内部声明的参数进行修改

③:常函数的this指针,有别于普通函数的this指针

#include 
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;
}

这里有个注意点:常对象只能调用常对象,如下面是不允许的:

C++ 常函数

另外 :

#include 
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;

总结 ,常函数具有保护类成员的作用。


本文题目:C++常函数
标题路径:http://cdkjz.cn/article/jeehjs.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220