mọi người xem hộ mình bài này với

Thảo luận trong 'Lập trình & Đồ hoạ' bắt đầu bởi killeroflove1989, 5/11/08.

  1. killeroflove1989

    killeroflove1989 Youtube Master Race

    Tham gia ngày:
    26/4/06
    Bài viết:
    35
    đây là class phân số do mình viết:
    #include<iostream.h>
    #include<conio.h>
    #include<math.h>

    class PhanSo
    {
    private:
    int Tu;
    int Mau;
    public:
    void operator ++();
    bool operator >=(PhanSo);
    bool operator <(PhanSo);
    void RutGon();
    PhanSo operator +(PhanSo);
    PhanSo operator *(PhanSo);
    void operator <<();
    void operator >>();
    }

    void PhanSo::operator ++()
    {
    Tu=Tu+Mau;
    return(void);
    }

    bool PhanSo::operator >=(PhanSo P)
    {
    return(((Tu*P.Mau-Mau*P.Tu)*Mau*P.Mau)<0);
    }

    bool PhanSo::operator <(PhanSo P)
    {
    return!(*this>=P);
    }

    void PhanSo::RutGon()
    {
    int x,y,ucln;
    x=Tu;
    y=Mau;
    while(x==y)
    {
    if(x>y)
    x=x-y;
    else
    if(x<y)
    y=y-x;
    }
    ucln=x;
    Tu=Tu/ucln;
    Mau=Mau/ucln;
    }

    PhanSo PhanSo::+(PhanSo P)
    {
    PhanSo Q;
    Q.Tu=Tu*P.Mau+Mau*P.Tu;
    Q.Mau=Mau*P.Mau;
    Q.RutGon();
    return(Q);
    }

    PhanSo PhanSo::*(PhanSo P)
    {
    PhanSo T;
    T.Tu=T.Tu*P.Tu;
    T.Mau=T.Mau*P.Mau;
    T.RutGon();
    return(T);
    }

    void PhanSo::operator >>()
    {
    cout<<Tu<<"/"<<Mau;
    }

    void PhanSo::operator <<()
    {
    while(Mau!=0)
    cin>>Tu;cout<<"/";cin>>Mau;
    if(Mau<0)
    {
    Tu=Tu*(-1);
    Mau=Mau*(-1);
    }
    }

    main()
    {
    PhanSo A,B,Tong,Tich;
    cout<<"hay nhap vao hia phan so: \n";
    cout<<"phan so thu 1: ";A<<;cout<<"\n";
    cout<<"phan so thu 2: ";B<<;cout<<"\n";
    cout<<"Tong hai phan so: ";
    Tong=A+B;
    Tong>>;
    cout<<"\n";
    cout<<"Tich hai phan so la: ";
    Tich=A*B;
    Tich>>;
    cout<<"\n";
    if(A>=B)
    cout<<"phan so thu 1 lon hon phan so thu 2";
    else
    cout<<"phan so thu 1 nho hon phan so thu 2";
    }

    khi compile thì nó báo tới 19 lỗi như sau(mình dùng dev C++):


    D:\Dev-Cpp\bin\PhanSo.cpp:17: error: `void PhanSo::operator<<()' must take exactly one argument
    D:\Dev-Cpp\bin\PhanSo.cpp:18: error: `void PhanSo::operator>>()' must take exactly one argument
    D:\Dev-Cpp\bin\PhanSo.cpp:22: error: new types may not be defined in a return type
    D:\Dev-Cpp\bin\PhanSo.cpp:22: error: two or more data types in declaration of `operator++'
    D:\Dev-Cpp\bin\PhanSo.cpp:22: error: prototype for `PhanSo PhanSo::operator++()' does not match any in class `PhanSo'
    D:\Dev-Cpp\bin\PhanSo.cpp:11: error: candidate is: void PhanSo::operator++()
    D:\Dev-Cpp\bin\PhanSo.cpp:22: error: `PhanSo PhanSo::operator++()' and `void PhanSo::operator++()' cannot be overloaded
    D:\Dev-Cpp\bin\PhanSo.cpp:54: error: expected unqualified-id before '+' token
    D:\Dev-Cpp\bin\PhanSo.cpp:54: error: expected init-declarator before '+' token
    D:\Dev-Cpp\bin\PhanSo.cpp:54: error: expected `,' or `;' before '+' token
    D:\Dev-Cpp\bin\PhanSo.cpp:63: error: expected `)' before "P"
    D:\Dev-Cpp\bin\PhanSo.cpp:63: error: expected init-declarator before "P"
    D:\Dev-Cpp\bin\PhanSo.cpp:63: error: expected `,' or `;' before "P"
    D:\Dev-Cpp\bin\PhanSo.cpp:73: error: `void PhanSo::operator>>()' must take exactly one argument
    D:\Dev-Cpp\bin\PhanSo.cpp:78: error: `void PhanSo::operator<<()' must take exactly one argument
    D:\Dev-Cpp\bin\PhanSo.cpp: In function `int main()':
    D:\Dev-Cpp\bin\PhanSo.cpp:92: error: expected primary-expression before ';' token
    D:\Dev-Cpp\bin\PhanSo.cpp:93: error: expected primary-expression before ';' token
    D:\Dev-Cpp\bin\PhanSo.cpp:96: error: expected primary-expression before ';' token
    D:\Dev-Cpp\bin\PhanSo.cpp:100: error: expected primary-expression before ';' token

    các bạn chỉ giúp mình các lỗi với, mình kém tiếng anh nên ko bít,nếu được thì sửa luôn giúp mình
    .
    ___________Auto Merge________________

    .
    sorry vì mình ko biêt cách post code lên nên, các dòng nó hơi bị lộn xộn, thông cảm nha
     
  2. LAX Girl

    LAX Girl Space Marine Doomguy Lão Làng GVN

    Tham gia ngày:
    23/8/06
    Bài viết:
    5,872
    Nơi ở:
    Wonder Land
    Tớ xem rồi. Và không thể xem hết được. Xin lỗi vì không giúp được bạn. Nhưng mình nghĩ mọi người đều thế ::(
     
  3. REALM

    REALM Legend of Zelda

    Tham gia ngày:
    30/6/03
    Bài viết:
    970
    Nơi ở:
    HCM city
    19 lỗi mới sợ chứ bài này làm chắc được thi lại đó bạn. Ngoài 19 lỗi kia còn 1 số lỗi sau. Bạn check nhé. À góp ý mốt viết thì nhớ sài cái pointer this cho nó rõ nghĩa nhìn nhức đầu quá.
    operator viết thành perator

    Mã:
    void PhanSo:perator ++()
    {
    Tu=Tu+Mau;
    return(void);
    }
    
    ---> hàm này sai cú pháp, ngoài ra nếu trả về void thì khi viết như vầy:
    Mã:
    PhanSo ps1(10,20),ps2;
    ps2=++ps1
    ----> báo lỗi nhé
    
    --->viết tầm bậy khúc này
    Mã:
    PhanSo operator +(PhanSo);
    PhanSo operator *(PhanSo);
    --->phải là như vầy
    PhanSo operator +(const PhanSo &ps);
    PhanSo operator *(const PhanSo &ps);
    
    --->hàm rút gọn viết tầm sàm bá láp, viết lại như vầy.
    Mã:
    void PhanSo::RutGon()
    {
    	int x,y;
    	x=abs(this->Tu);
    	y=abs(this->Mau);
    	while(x==y)
    	{
    		if(x>y)
    			x=x-y;
    		else
    		if(x<y)
    		y=y-x;
    	}
    	this->Tu/=x;
    	this->Mau/=x;	
    }
    
    Mã:
    void operator <<();
    void operator >>();
    
    ---> tới đây nhìn là mệt rùi, thui viết lại nguyên bài cho bạn luôn cho rùi nhìn cái này là cúm gà rùi.
     
  4. REALM

    REALM Legend of Zelda

    Tham gia ngày:
    30/6/03
    Bài viết:
    970
    Nơi ở:
    HCM city
    File PS.h
    Mã:
    #ifndef PS_H
    #define PS_H
    #include <iostream.h>
    class PS
    {
    	int t,m;
    	void ToiGian();
    public:
    	PS(int t=0,int m=1);
    	PS operator * (const PS &ps);
    	PS operator / (const PS &ps);
    	PS operator +(const PS &ps);
    	PS operator -(const PS &ps);
    	friend ostream & operator <<(ostream & os, const PS &ps);
    	friend istream & operator >>(istream & is, PS &ps);
    };
    #endif
    
    file PS.cpp
    Mã:
    #include "PS.h"
    #include <math.h>
    PS::PS(int t, int m)
    {
    	this->t=t;
    	this->m=m;
    	ToiGian();
    }
    ostream & operator <<(ostream & os, const PS &ps)
    {
    	os<<ps.t;
    	if(ps.m!=1)
    		os<<"/"<<ps.m;
    	return os;
    }
    istream & operator >>(istream & is, PS &ps)
    {
    	int a,b;
    	char t;
    	cout<<"Nhap Phan So (t/m):";
    	is>>a>>t>>b;
    	if(b==0)
    	{
    		is>>ps;
    	}
    	else
    	{
    		ps.m=b;
    		ps.t=a;
    		ps.ToiGian();
    	}
    	return is;
    }
    
    PS PS::operator * (const PS &ps)
    {
    	return PS(this->t*ps.t,ps.m*this->m);
    }
    PS PS::operator / (const PS &ps)
    {
    	return PS(this->t*ps.m,ps.t*this->m);
    }
    PS PS::operator +(const PS &ps)
    {
    	return PS(this->t*ps.m+ps.t*this->t,ps.m*this->m);
    }
    PS PS::operator -(const PS &ps)
    {
    	return PS(this->t*ps.m-ps.t*this->t,ps.m*this->m);
    }
    void PS::ToiGian()
    {
    	if(this->m!=1)
    	{
    		int a=abs(this->t);
    		int b=abs(this->m);
    		while(a!=b)
    		{
    			if(a>b)
    				a=a-b;
    			if(a<b)
    				b=b-a;
    		}
    		this->t/=a;
    		this->m/=b;
    		if(this->m<0)
    		{
    			this->m=-this->m;
    			this->t=-this->t;
    		}
    	}
    }
    
    viết vầy thi dc 5 điểm đó
     
  5. killeroflove1989

    killeroflove1989 Youtube Master Race

    Tham gia ngày:
    26/4/06
    Bài viết:
    35
    hi hi thanks, cái này mới học chưa hiểu lắm nghịch thử, sai tùm lum hết, lần sau sẽ cố gắng hơn:D
     
  6. killeroflove1989

    killeroflove1989 Youtube Master Race

    Tham gia ngày:
    26/4/06
    Bài viết:
    35
    à quên , bạn có thể giải thích ho mình ý nghĩa của mấy cái ostream ,instream, và tại sao phải để const PhanSo &ps mình chưa rõ lắm(quên thật ko cố ý spam:;))
     
  7. REALM

    REALM Legend of Zelda

    Tham gia ngày:
    30/6/03
    Bài viết:
    970
    Nơi ở:
    HCM city
    const PhanSo &ps ---> dấu "&" khi truyền thì truyền tham số cho hàm thì lấy chính bản thân vùng nhớ của của biến có kiểu Phân Số, không tốn chi phí tạo bản sao vì như vậy sẽ làm chuơng trình chạy chậm hơn, const truyền bằng hằng không cho sửa chữa.
    Khi cần overload 2 cái << và >> thì phải dùng 2 cái em OStream, và ISTream tạm dịch ra tiếng việt Ostream--> luồng xuất, istream là luồng nhập
     

Chia sẻ trang này