C++ 常函数

发布时间:2020-06-11 22:34:57 作者:Aonaufly
来源:网络 阅读:1066

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

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

结果:

C++ 常函数


常函数->

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

需要注意的是 :

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

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

C++ 常函数

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

③:常函数的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;
}

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

C++ 常函数


另外 :

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

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

推荐阅读:
  1. c++中怎么判断函数重载
  2. C++中的六个函数

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++ 常函数 c+

上一篇:超详细实操教程!在现有K8S集群上安装JenkinsX,极速提升CI/CD体验!

下一篇: 常见的网络管理技术之snmp和端口镜像、流镜像

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》