const在类和对象中的应用

const在类和对象中的应用
(1)常量数据成员的应用
(2)函数的参数为常量的应用
(3)常量函数的应用
(4)常量对象的应用

1.常量数据成员的应用
    如果某个类中数据成员是const,表示这个数据成员不能直接被修改,这就要求const数据成员变量需要初始化,但是在类中,数据成员不允许在类里定义时初始化。
    那const成员变量什么时候初始化呢?
    分析:类是一种数据类型,所以没有必要在类产生时就让数据成员初始化,这也不符合逻辑。
              类中数据成员、函数成员最终的使用都是通过实例的对象后调用,也就是说有了对象,数据成员和函数成员才                 有了生命,所以要对数据成员初始化的时机,就应该是对象产生的时刻。
    *由分析可知:const数据成员的初始化应该在构造函数中进行,但是const数据成员的初始化必须在构造函数的初始        化表中进行

2.函数的参数为常量的应用
    类中函数成员的参数通常使用引用,表示用源头的数据,不会自己再复制一份。如果希望传给函数成员的数据不被破坏,就需要定义成const,通常函数成员的参数const和引用联合使用。
示例代码:
class Demo
{
public:
    Demo(int a): m_a(a){}
    void Set(const int &x)
    {
        m_a = x;
    }
private:
    int m_a;
};

int main()
{
    int x = 999;
    Demo d(10);
    d.set(x);
    return 0;
}

3.常量函数的应用
    ***常量函数的最重要的特点是该函数内部不允许修改类的数据成员。
    在C++中,常量函数必须定义在类中,以函数成员的形式出现。常量成员函数的好处就是保证类的封装性,能够有效防止类的数据成员被非法访问。
    做一个区分:
        const int fun(void);    ->这不是常量函数,仅仅表示函数的返回值为常量
        int fun(void) const;    ->常量成员函数
一个注意点!!!
    int fun(void) const;   和 int fun(void); 是否构成重载?
        答案是可以构成重载。为社么这里函数名和参数相同也构成重载呢?
        因为类的成员函数的第一个参数被隐藏,类中的成员函数第一个参数是this指针被隐藏,普通成员函数的指针是普          通指针,常量成员函数的this指针是常量指针,所以实际上有一个参数不同,所以构成重载。
      那么思考一个问题?这俩个函数构成重载,那如何区别调用到常量函数呢?
           常量函数和非常量函数重载时,非常量对象调用非常量函数
           常量函数和非常量函数重载时,常量对象调用常量函数

常量函数的最重要的特点是该函数内部不允许修改类的数据成员。
示例代码:
class Demo
{
public:
    Demo(int a): m_a(a){}
    void Set(const int &x)
    {
        m_a = x;
    }
    void Set(const int &x)const
    {
        m_a = x;    //这句话编译器会报错,常量函数不可以修改类的数据成员
    }
private:
    int m_a;
};

int main()
{
    int x = 999;
    Demo d(10);
    d.set(x);
    return 0;
}    

*对象调用常量函数的规则
    (1)非常量对象可以调用常量函数
    (2)非常量对象可以调用非常量函数
    (3)常量对象可以调用常量函数
    (4)常量对象不可以调用非常量函数
    (5)常量函数和非常量函数重载时,非常量对象调用非常量函数
    (6)常量函数和非常量函数重载时,常量对象调用常量函数



4.常量对象的应用
    const Demo d;     ->常量对象
    应用在常量函数的调用上,因为当常量函数和非常量函数重载时,常量对象能调用常量函数 。
    常量对像只能调用常量函数
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值