码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 常函数长函数

时间:2017-05-07 20:01:31      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:c++ 常函数

常函数的意义对与普通函数来说,因为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;

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

本文出自 “Better_Power_Wisdom” 博客,请务必保留此出处http://aonaufly.blog.51cto.com/3554853/1922882

C++ 常函数长函数

标签:c++ 常函数

原文地址:http://aonaufly.blog.51cto.com/3554853/1922882

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!