bạn viêt contructor tham số, contructor mặc định, contructor copy, operator<<, operator>>,operator+,-,*,/ nói chung là đề yêu cầu đa năng hóa các toán tử để sử dụng cho lớp đó bạn
Mình thấy cái đề thi của mấy khóa trước trường mình yêu cầu như thế này. mình không biết phải làm thế nào cho đúng.
*****//khai báo và định nghĩa lớp đối tượng CPhanSo cần thiết để hàm main có thể thực hiện
void main()
{
CPhanSo a,b(1),c(2,3)
cin>>a;
CPhanSo tong =a+b;
cout<<" Tong hai phan so "<<a<<"+"<<b<<"="<<Tong;
CPhanSo Hieu =a-5;
cout <<"Hieu="<<Hieu ;
Cphanso Tich =5*c;
cout<<" Tich="<<Tich;
}
bạn viêt contructor tham số, contructor mặc định, contructor copy, operator<<, operator>>,operator+,-,*,/ nói chung là đề yêu cầu đa năng hóa các toán tử để sử dụng cho lớp đó bạn
I'll come back
minh co doan code k pit dung khong
nen up len cho ae chem dum!!!
// phan so_operator.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include"iostream"
using namespace std;
class PHANSO
{
private:
int tu,mau;
public:
PHANSO(){}
PHANSO(int _tu,int _mau=1)
{
tu=_tu;
mau=_mau;
}
PHANSO(const PHANSO& src)
{
this->tu=src.tu;
this->mau=src.mau;
}
void nhap()
{
cout<<"nhap tu: ";cin>>tu;
cout<<"nhap mau: ";cin>>mau;
}
void xuat()
{
cout<<"phan so:= ";
dongian();
cout<<tu<<"/"<<mau<<endl;
}
friend istream & operator>>(istream &ist, PHANSO&b)
{
cout<<"nhap tu: "; ist>>b.tu;
cout<<"nhap mau: "; ist>>b.mau;
return ist;
}
friend ostream & operator<<(ostream &ost,PHANSO &b)
{
b.dongian();
ost<<b.tu<<"/"<<b.mau<<endl;
return ost;
}
int ucln(int a,int b)
{
a=abs(a);
b=abs(b);
while(a!=0&&b!=0)
{
if(a>b)
a-=b;
else
b-=a;
}
return a;
}
void dongian()
{
int uc=ucln(tu,mau);
tu/=uc;
mau/=uc;
}
friend PHANSO operator +(PHANSO a,PHANSO b);
friend PHANSO operator -(PHANSO a,PHANSO b);
friend PHANSO operator *(PHANSO a,PHANSO b);
};
PHANSO operator +(PHANSO a,PHANSO b)
{
PHANSO temp;
temp.tu=a.tu*b.mau+b.tu*a.mau;
temp.mau=b.mau*a.mau;
return temp;
}
PHANSO operator -(PHANSO a,PHANSO b)
{
PHANSO temp;
temp.tu=a.tu*b.mau-b.tu*a.mau;
temp.mau=b.mau*a.mau;
return temp;
}
PHANSO operator *(PHANSO a,PHANSO b)
{
PHANSO temp;
temp.tu=a.tu*b.tu-b.mau*a.mau;
temp.mau=b.mau*a.mau;
return temp;
}
int _tmain(int argc, _TCHAR* argv[])
{
PHANSO a,b(1),c(2,3);
cin>>a;
PHANSO Tong =a+b;
cout<<" Tong hai phan so "<<a<<"+"<<b<<"="<<Tong<<endl;
PHANSO Hieu =a-5;
cout <<"Hieu="<<Hieu<<endl;
PHANSO Tich =5*c;
cout<<" Tich="<<Tich<<endl;
cin.get();cin.get();
return 0;
}
I'll come back
Mình thấy nên trả về tham trị vì biến temp là biến local trong hàm khi return VS nó warning.
Mặc dù chạy đúng nhưng 1 số trường hợp nó sai.
Tuyệt đối không trả về tham chiếu với các operator+-*/
Tham chiếu? Lấy chiếu ở đâu ra mà tham???
Khi người ta viết c = a + b thì theo ngữ nghĩa mặc định, a và b không bị thay đổi. Vì vậy bạn không thể trả về tham chiếu đến a hay đến b được.
Ngược lại với bạn nói, trả về value mới ra kết quả đúng. Nếu trả về tham chiếu (đến a hoặc b) thì biểu thức c = a + b + a + b sẽ không ra 2*(a + b) mà ra kết quả sai.
hihi, xem lại sách đi bạn, mình làm nhiều bài tập phần này lắm rồi nên có kinh nghiệm như vậy đó, tùy các bạn thôi, ý kiến của mình là vậy đó, khi bạn không dùng một biến để gán dữ liệu cho a+b+a+b xem kết quả còn đúng không giả sử đề yêu cầu tính không dùng biến khác xem nào kết quả ra có đúng không, nếu bạn trả về tham chiếu thì lúc tính a+b+a+b bạn chỉ việc cout<<a là ra kết quả rồi, mình nói trả về tham chiếu để đúng vs mọi bài toán thôi, còn nếu đề không yêu cầu thì cứ làm theo ý các bạn, sr đóng góp ý kiến để chia sẻ kinh nghiệm mà bị phản đối cũng thấy hơi ngại
I'll come back
Ý của @fbchick là đúng rồi. Chỉ trả tham chiếu với toán tử gán kết hợp như +=, -=, ... Còn toán tử 2 ngôi như +, -, *, / thì phải trả ra trị chứ. Còn cái dzụ của bạn là dùng 1 biểu thức a + b + a + b mà khi xuất kết quả là thằng a là xong ko cần biến tạm thì cái này chắc chỉ đối phó thôi, chứ chả có OOP tí nào.
@Chủ topic cái bài này trong forum có rất nhiều bạn àh, chịu khó search đi. Với lại vừa đọc lt vừa vọc thì mới thấm chứ!
i dont care who are u, where yr from, what u did , as long as u love me