第6周-任务1-使用常对象的一个典型错误

【题目】下面的程序存在编译错误。有两种方法可以修改,请给出这两种修改方案,在报告中说明你倾向于用哪一种?为什么?处理此类问题的原则是什么?

class C
{private:
    int x;
 public:
    C(int x){this->x= x;}
    int getX(){return x;}
};
void main()
{
    const C c(5);
    cout<<c.getX();   //这一行将会出现错误
    system("pause");
}

【分析】这个程序中的问题在于第10行定义了常对象c;然而在第11行对c的访问中,用了getX()函数,该函数并不是一个const成员函数。

【确症】常对象要由常成员函数进行操作。

【药方】(1)第10行,定义对象 c 时,去掉限定词 const—— c将不享受由const带来的保护;(2)在第 6 行成员函数getX()的定义中,指定const 限定词,指明为一个常成员函数——该函数将不能实施对对象的修改。本题只意在强化这一语法点,程序也并无实际的意义,这两种方法都可以。但在实际应用中,要根据实际的需求确定合适的方案。

【方案1】定义对象 c 时,去掉限定词 const—— c将不享受由const带来的保护

class C
{private:
    int x;
 public:
    C(int x){this->x= x;}
    int getX(){return x;}
};
void main()
{
    C c(5);   //去掉const
    cout<<c.getX();
    system("pause");
}

【方案2】成员函数getX()的定义中,指定const 限定词,指明为一个常成员函数——该函数将不能实施对对象的修改

class C
{private:
    int x;
 public:
    C(int x){this->x= x;}
    int getX() const {return x;} //加上const,成为常成员函数
};
void main()
{
    const C c(5);
    cout<<c.getX();
    system("pause");
}

【评价】在本题中,getX()函数意在返回私有成员x的值,是一个典型的只读不修改的函数。为了防止其中意外的错误修改,常要用 const 进行限定。这样处理后,函数既可以被const 对象调用,也可以被非const对象调用。所以,此方案更好。

将一个函数声明为常成员函数仍然是一个粗线条的处理。更常见的,我们用const 限定函数的参数,这样可以实现更灵活的限定。 



(本文完)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迂者-贺利坚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值