cuốn sách gpt4 ai đã làm

c++ - Đầu ra lạ do nạp chồng toán tử

In lại Tác giả: Walker 123 Thời gian cập nhật: 27-11-2023 23:11:55 hai mươi bốn 4
mua khóa gpt4 Nike

Tôi mới làm quen với C++ và để làm bài tập, tôi đã tạo một lớp phân số "Frac". Mọi thứ dường như hoạt động tốt, ngoại trừ khi tôi muốn in kết quả của một thao tác như (a+b), trong đó a và b là các đối tượng Frac. Trong chức năng chính của tôi, tôi sử dụng:

 Frac a(5, 2), b(9, 2), c(a+b); //Ba phân số a=5/2, b=9/2, và c = a+b = 14/2 = 7 /1
cout << (a+b) << endl; //Kết quả của dòng này không có ý nghĩa gì với tôi: luôn luôn 2686600/4201035
cout << c << endl // Kết quả của dòng này là ok : 7/1

Đây là cách tôi quá tải toán tử<<:

ostream& toán tử<<(ostream &stream, Fract const& a){
luồng << a.getNum() << "/" << a.getDenom(); //Num là tử số của phân số a, Denom là mẫu số của nó

luồng trở lại;
}

Toán tử+:

Phân số& toán tử+(Phân số const& a, Phân số const& b){
Bản sao phân số(a);
bản sao += b;
trả lại bản sao;
}

Toán tử +=:

Phân số& Phân số::operator+=(Phân số const& b){
Bản sao phân số (b);
// Đặt cùng mẫu số cho phép cộng
copy.m_denom *= m_denom;
copy.m_num *= m_denom;
m_denom *= b.m_denom;
m_num *= b.m_denom;
// Bây giờ trên cùng mẫu số
m_num += copy.m_num;
Phân số::đơn giản hóa();

trả lại *cái này;
}

người thiết lập/người nhận:

int Fract::getDenom() const{return m_denom;}

int Fract::getNum() const{return m_num;}

Khi tôi gỡ lỗi chương trình, mọi thứ đều hoạt động tốt cho đến dòng này trong toán tử<<:

  luồng << a.getNum() << "/" << a.getDenom();

Trước khi thực thi, các giá trị của a.m_num và a.m_denom vẫn ổn (7 và 1, được kiểm tra bằng trình gỡ lỗi), nhưng sau lệnh gọi đầu tiên (ở đây là a.getDenom()), a.m_num và .m_denom sẽ chuyển từ 7 và 1 đến 2686600 và 4201035 bất kể nhà điều hành là gì, vì vậy...

  Phân số a(5,2), b(9,2);
cout << (a+b) << endl << (a*b) << endl << (a/b) << endl << (ab);

Đầu ra của ... là:

2686600/4201035
2686600/4201035
2686600/4201035
2686600/4201035

Và...

  Phân số a(5,2), b(9,2), c(a+b), d(a*b), e(a/b), f(ab);
cout << c << endl << d << endl << e << endl << f;

Đầu ra của ... là:

1/7
45/4
9/5
-2/1

Tất cả các kết quả chính xác...

Điều này làm tôi phát điên. Tôi đã tìm kiếm hàng giờ nhưng không tìm thấy giải pháp hoặc bất kỳ ai có cùng vấn đề. Sẽ thật tuyệt nếu có ai có thể giúp tôi. Cảm ơn.

câu trả lời hay nhất

Phân số& toán tử+(Phân số const& a, Phân số const& b){
Bản sao phân số(a);
...
trả lại bản sao;
}

Bạn đang trả về một tham chiếu đến một biến cục bộ, nhưng khi biến đó hết hạn, tất cả dữ liệu sẽ biến mất. Bạn nên trả về theo giá trị:

Toán tử Frac+(...)

Về c++ - đầu ra lạ do quá tải toán tử, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/19747985/

hai mươi bốn 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress