微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在对象未更新时传递对常量对象的引用

如何解决在对象未更新时传递对常量对象的引用

我在下面写了一个玩具类。

标题

class saleData{
  private:
    std::string isbn;
    unsigned cnt;
    double price;

  public:
    saleData(const std::string s,unsigned c,double p): isbn{s},cnt{c},price{p} {};
    
    unsigned getCnt(){
      return cnt;
    }

    double getPrice(){
      return price;
    }

    saleData &combine(####const#### saleData &x){
      cnt += x.getCnt();
      price=(price*cnt + x.getCnt()*x.getPrice()) / (cnt + x.getCnt());
      return *this;
    }
};

主要功能

int main(){
  saleData x("xx",3,4.4);
  saleData y("yy",4,3.3);
  x.combine(y);
  cout<<"total revenue is "<<x.getCnt() * x.getPrice()<<endl;
  return 0;
}

如果我在组合函数中有####const####,我会得到一些编译错误,如

sale_data.h:25:35: error: passing 'const saleData' as 'this' argument of 'unsigned int 
saleData::getCnt()' discards qualifiers [-fpermissive] 
       price=(price*cnt + x.getCnt()*x.getPrice()) / (cnt + x.getCnt());

如果我删除常量,一切正常。

但是我没有为 saleData x 修改任何东西,对吗?我只是在看它的 cnt 和价格。

解决方法

不能在 getPrice() 对象上调用非常量成员函数(getCnt()const)。您应该将它们设为 const,以表明它们不会修改任何非静态数据成员。

class saleData{
  private:
    std::string isbn;
    unsigned cnt;
    double price;

  public:
    saleData(const std::string s,unsigned c,double p): isbn{s},cnt{c},price{p} {};
    
    unsigned getCnt() const {
      return cnt;
    }

    double getPrice() const {
      return price;
    }

    saleData &combine(const saleData &x){
      cnt += x.getCnt();
      price=(price*cnt + x.getCnt()*x.getPrice()) / (cnt + x.getCnt());
      return *this;
    }
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。