每日 C++ - Const 函数

介绍

这节主要探究类的 const 函数的可调用关系,首先先说明下什么是 const 函数,如下形式:

std::string getName() const {
	return name;
}

我们来看下面这个类

#ifndef __CONSTA_H_INCLUDE__
#define __CONSTA_H_INCLUDE__

class ConstA 
{
public:
    ConstA() : x(1), p(&x), xx(1), pp(&xx) {

    }

    int a();
    const int b();
    int c() const;
    const int d() const;

private:
    const int x;
    int xx;
    const int *p;
    int* const pp;
};


int ConstA::a() {
    return x;
}

const int ConstA::b() {
    return *p;
}

int ConstA::c() const {
    return xx;
}

const int ConstA::d() const {
    return *pp;
}

#endif // __CONSTA_H_INCLUDE__

然后我们在 main 函数中定义两个对象 ConstA ca 和 const ConstA ca

int main()
{
    ConstA ca;
    const ConstA ca2;
    std::cout << ca.a() << std::endl;
    std::cout << ca.b() << std::endl;
    std::cout << ca.c() << std::endl;
    std::cout << ca.d() << std::endl;

    std::cout << "************************" << std::endl;

    std::cout << ca2.a() << std::endl;
    std::cout << ca2.b() << std::endl;
    std::cout << ca2.c() << std::endl;
    std::cout << ca2.d() << std::endl;
    return 0;
}

这时我们发现 ca2 无法调用 a() 和 b(),需要进行一定的转换,const_cast<ConstA&>(ca2).a() 或 const_cast<ConstA&>(ca2).b()。

const 函数与非 const 函数的调用规则

  • const 对象默认调用 const 成员函数,非 const 对象默认调用非 const 成员函数;

  • 若非 const 对象想调用const成员函数,则需要显示的转化,例如(const ConstA&)ca.d();

  • 若 const 对象想调用非const成员函数,同理进行强制类型转换 const_cast<ConstA&>(ca2).a();

  • 非 const 对象可以调用非 const 成员函数,也可调用 const 成员函数;

  • const 对象仅可以调用 const 成员函数,如果直接调用非 const 成员函数则编译器会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值