提问人:WriteBackCMO 提问时间:2/23/2021 更新时间:2/23/2021 访问量:44
在对象未更新时传递对常量对象的引用 [复制]
passing reference to constant object while the object is not updated [duplicate]
问:
我在下面写了一个玩具课。
页眉
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;
}
如果我在 combine 函数中有 ####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());
如果我删除 const,一切正常。
但是我没有为 saleData x 修改任何内容,对吧?我只是在阅读它的 cnt 和价格。
答:
3赞
songyuanyao
2/23/2021
#1
不能在对象上调用非常量成员函数 ( 和 )。你应该让它们 ,以告诉它们不会修改任何非静态数据成员。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;
}
};
评论
getPrice
y