ฉันกำลังอ่าน C++ Primer รุ่นที่ 5 หน้า 258 คำถามคือ const object สามารถเรียกฟังก์ชันที่ไม่ใช่ const ได้หรือไม่ แม้ว่าฟังก์ชันสมาชิกนั้นจะไม่แก้ไขข้อมูลก็ตาม
Sales_data.h
#include <iostream>
#include <string>
struct Sales_data {
// data members
std::string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
// memeber functions
const std::string isbn() const { return bookNo; }
Sales_data& combine(const Sales_data&);
double avg_price() const { // *
if (units_sold) {
return revenue / units_sold;
}
return 0.0;
}
};
std::ostream& print(std::ostream &os, const Sales_data& data) {
os << data.isbn() << " " << data.units_sold << " " << data.avg_price();
return os;
}
use_Sales_data.cpp
#include <iostream>
#include "Sales_data.h"
using namespace std;
int main(){
Sales_data data;
data.bookNo = "CSAPP";
data.units_sold = 2;
data.revenue = 50;
print(cout, data);
}
เมื่อฉันลบ const
สำหรับฟังก์ชัน avg_price
โค้ดจะไม่คอมไพล์ แต่ฉันคิดว่าฟังก์ชัน avg_price()
ไม่ได้แก้ไขวัตถุ ฉันเดาว่าในรายการพารามิเตอร์ของ print
ฉันประกาศวัตถุ Sales_data
เป็น const
และ C++ ไม่อนุญาตให้วัตถุ const เรียกใช้ฟังก์ชันสมาชิกที่ไม่ใช่ const เป็นกรณีนี้หรือไม่?