Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Bài tập kế thừa, đa hình.=>lỗi, ko sửa được

  1. #1
    Ngày gia nhập
    05 2008
    Bài viết
    24

    Mặc định Bài tập kế thừa, đa hình.=>lỗi, ko sửa được

    Khen thưởng SV, GV. SinhVien,GiangVien kế thừa từ lớp nguoi. Gọi đến cóntructor SinhVien(); thì nó sẽ gọi đến hàm nhập SinhVien::nhap(); nhưng trong code nó lại bắt nhập tên 2 lần... chẳng biết nó gọi chi nữa?
    Hy vọng mọi người debug dùm, cái này chỉ là vd đơn giản thôi nhưng mới học, củ chuối quá ngồi sửa 2 ngày rồi mà ko xong...
    PHP Code:
    #include <string.h>
    #include <iostream.h>
    #include <conio.h>
    #include<ctype.h>
    class nguoi//lop truu tuong
    {
        protected:
    //protected de lop dan xuat dc thua ke lai
        
    char *ten;
    //    static int songuoi;
    //    static nguoi *listnguoi[100];
    public:
        
    nguoi(char *t)
        {
        
    ten=strdup(t);//copy ten
        
    }
        
    nguoi(){nhap();}
    public:
        
    virtual ~nguoi()
        {
        
    delete ten;
        }
        
    virtual int khenthuong()=0;//phuong thuc thuan ao
        
    virtual void nhap();//phuong thuc ao
        
    virtual void xuat();//phuong thuc ao
    };
    void nguoi::nhap()
    {
        
    cout<<"Nhap ten: ";cin>>ten;
    }
    void nguoi::xuat()
    {
        
    cout<<"Ho ten: "<<ten;
    }
    //===============================================================
    class SinhVien :public nguoi
    {
        
    float dtb;
        static 
    int sosinhvien;
        static 
    SinhVien *svien[100];
        public:
        
    SinhVien(){nhap();}
        
    SinhVien(char *t,float diem): nguoi(t)//ke thua tu class nguoi
        
    {
            
    dtb=diem;
        }
        
    //virtual ~SinhVien();
        
    int khenthuong();
        
    virtual void nhap();//da hinh
        
    virtual void xuat();//da hinh
    };
    int SinhVien::khenthuong()
    {
        if(
    dtb<7.0) return 0;
        else return 
    1;
    }
    void SinhVien::nhap()
    {
        
    nguoi::nhap();
        
    cout<<"Nhap diem trung binh: ";cin>>dtb;
    }
    void SinhVien::xuat()
    {
        if(
    khenthuong()) cout<<"Sinh vien "<<ten<<" duoc khen thuong"<<endl;
        else 
    cout<<"Sinh vien "<<ten<<" duoc khen thuong"<<endl
    }
    //===============================================================


    class GiangVien: public nguoi
    {
            
    int sobaibao;
        public:
            
    GiangVien(){nhap();}
            
    GiangVien(char *t,int baibao):nguoi(t)
            {
                
    sobaibao=baibao;    
            }
            
    //virtual ~GiangVien();
            
    int khenthuong();     
            
    virtual void nhap();
            
    virtual void xuat();
    };
    int GiangVien::khenthuong()
    {
        if(
    sobaibao<10) return 0;
        else return 
    1;
    }
    void GiangVien::nhap()
    {
        
    nguoi::nhap();
        
    cout<<"Nhap so bai bao: ";cin>>sobaibao;
    }
    void GiangVien::xuat()
    {
        
    nguoi::xuat();
        if(
    khenthuong()) cout<<"\nGiang vien "<<ten<<" duoc khen thuong!"<<endl;
        else 
    cout<<"\nGiang vien "<<ten<<" ko duoc khen thuong!"<<endl
    }
    //===============================================================
    int main()
    {
        
    nguoi *ng[100];
        
    int N=0;
        
    char loai,chon;
        do
        {
        
    cout<<"Chon sinh vien hay giang vien: ";
        
    cin>>loai;
        
    loai=toupper(loai);
        if(
    loai='s')
            
    ng[N++]=new SinhVien();
        else 
    ng[N++]=new GiangVien();
        for(
    int i=0;i<N;i++) ng[i]->xuat();
        
    cout<<"Tep tuc";cin>>chon;
        
    chon=toupper(chon);
        if((
    N==100)||(chon=='k')) break;
        }while(
    1);
        return 
    0;
        
    getche();

    Đã được chỉnh sửa lần cuối bởi PDV : 18-04-2009 lúc 11:34 AM.

  2. #2
    Ngày gia nhập
    04 2008
    Nơi ở
    HCMC
    Bài viết
    251

    Cái này
    C++ Code:
    1. SinhVien(){nhap();}
    và cái này
    C++ Code:
    1. void SinhVien::nhap()
    2. {
    3.     nguoi::nhap();
    4.     cout<<"Nhap diem trung binh: ";cin>>dtb;
    5. }
    gọi 2 lần hàm nhập nên tất nhiên là 2 lần nhập rồi.Bỏ hàm nhập trong constructor đi
    C++ Code:
    1. for(;;){cout<<"Busy"<<endl;}
    2. system("cls");
    Hãy ủng hộ cho quỹ phát triển cộng đồng C Việt
    http://congdongcviet.com/quyphattrien-congdongcviet.cpp

  3. #3
    Ngày gia nhập
    10 2008
    Bài viết
    178

    PHP Code:
    void nguoi::nhap()
    {
        
    cout<<"Nhap ten: ";cin>>ten;

    với phương thức nhâp viết như vây nhập được không nhỉ

  4. #4
    Ngày gia nhập
    05 2008
    Bài viết
    24

    Trích dẫn Nguyên bản được gửi bởi thienthan34 Xem bài viết
    Cái này
    C++ Code:
    1. SinhVien(){nhap();}
    và cái này
    C++ Code:
    1. void SinhVien::nhap()
    2. {
    3.     nguoi::nhap();
    4.     cout<<"Nhap diem trung binh: ";cin>>dtb;
    5. }
    gọi 2 lần hàm nhập nên tất nhiên là 2 lần nhập rồi.Bỏ hàm nhập trong constructor đi
    Et. Sao được. Vì SinhVien kế thừa từ nguoi mà. Mình gọi constructor SnhVien nó biết gọi đến hàm nào. Ý tưởng ở đây là 2 constructor nếu nó có tham số truyền vào thì OK còn ko thì nó sẽ gọi đến hàm SinhVien::nhap(); bỏ đi nó báo lỗi...
    Trích dẫn Nguyên bản được gửi bởi rua_con Xem bài viết
    PHP Code:
    void nguoi::nhap()
    {
        
    cout<<"Nhap ten: ";cin>>ten;

    với phương thức nhâp viết như vây nhập được không nhỉ
    Nhập được mà, vẫn chạy được đó....

  5. #5
    Ngày gia nhập
    10 2008
    Bài viết
    178

    Trích dẫn Nguyên bản được gửi bởi PDV Xem bài viết
    Et. Sao được. Vì SinhVien kế thừa từ nguoi mà. Mình gọi constructor SnhVien nó biết gọi đến hàm nào. Ý tưởng ở đây là 2 constructor nếu nó có tham số truyền vào thì OK còn ko thì nó sẽ gọi đến hàm SinhVien::nhap(); bỏ đi nó báo lỗi...

    Nhập được mà, vẫn chạy được đó....
    nhâp đươc hả,chưa cấp phát cũng chạy sao

  6. #6
    Ngày gia nhập
    05 2008
    Bài viết
    24

    Mặc định Bài tập kế thừa, đa hình.=>lỗi, ko sửa được

    Trích dẫn Nguyên bản được gửi bởi rua_con Xem bài viết
    nhâp đươc hả,chưa cấp phát cũng chạy sao
    Mình cấp trong hàm main rồi cái hàm nhập chỉ đơn thuần là nhập dữ liệu vào một đối tượng thôi.

  7. #7
    Ngày gia nhập
    10 2008
    Bài viết
    178

    trong hàm main đâu có cấp phát char * j đâu
    hơ hơ sao lạ nhỉ char * không cấp phát cũng nhập được ah chưa thử bao jo
    em lấy cái này chạy thử không chạy dduwoc
    PHP Code:
    #include "iostream"
    using namespace std;
    class 
    nguoi//lop truu tuong
    {
    protected:
    //protected de lop dan xuat dc thua ke lai
        
    char *ten;
        
    //    static int songuoi;
        //    static nguoi *listnguoi[100];
    public:
        
    nguoi(char *t)
        {
            
    ten=strdup(t);//copy ten
        
    }
        
    nguoi(){nhap();}
    public:
        
    virtual ~nguoi()
        {
            
    delete ten;
        }
        
    //virtual int khenthuong()=0;//phuong thuc thuan ao
        
    virtual void nhap();//phuong thuc ao
        
    virtual void xuat();//phuong thuc ao
    };
    void nguoi::nhap()
    {
        
    cout<<"Nhap ten: ";cin>>ten;
    }
    void nguoi::xuat()
    {
        
    cout<<"Ho ten: "<<ten;

    int main()
    {
        
    nguoi A;
        
    A.nhap();
        
    A.xuat();
        return 
    0;

    Đã được chỉnh sửa lần cuối bởi rua_con : 18-04-2009 lúc 08:44 PM.

  8. #8
    Ngày gia nhập
    05 2008
    Bài viết
    24

    Trích dẫn Nguyên bản được gửi bởi rua_con Xem bài viết
    trong hàm main đâu có cấp phát char * j đâu
    hơ hơ sao lạ nhỉ char * không cấp phát cũng nhập được ah chưa thử bao jo
    em lấy cái này chạy thử không chạy dduwoc
    PHP Code:
    #include "iostream"
    using namespace std;
    class 
    nguoi//lop truu tuong
    {
    protected:
    //protected de lop dan xuat dc thua ke lai
        
    char *ten;
        
    //    static int songuoi;
        //    static nguoi *listnguoi[100];
    public:
        
    nguoi(char *t)
        {
            
    ten=strdup(t);//copy ten
        
    }
        
    nguoi(){nhap();}
    public:
        
    virtual ~nguoi()
        {
            
    delete ten;
        }
        
    //virtual int khenthuong()=0;//phuong thuc thuan ao
        
    virtual void nhap();//phuong thuc ao
        
    virtual void xuat();//phuong thuc ao
    };
    void nguoi::nhap()
    {
        
    cout<<"Nhap ten: ";cin>>ten;
    }
    void nguoi::xuat()
    {
        
    cout<<"Ho ten: "<<ten;

    int main()
    {
        
    nguoi A;
        
    A.nhap();
        
    A.xuat();
        return 
    0;



    Khi chạy nó báo lỗi như vậy... Khi compile thì trình biên dịch ko báo gì hết????

  9. #9
    Ngày gia nhập
    04 2008
    Nơi ở
    HCMC
    Bài viết
    251

    Sửa tạm class nguoi như thế này( Mình dùng vs 6.0)
    C++ Code:
    1. #include <iostream.h>
    2. #include <string>
    3. using namespace std;
    4. class nguoi//lop truu tuong
    5. {
    6. protected://protected de lop dan xuat dc thua ke lai
    7.     char *ten;
    8.     //    static int songuoi;
    9.     //    static nguoi *listnguoi[100];
    10. public:
    11.     nguoi(char *t)
    12.     {
    13.         ten=strdup(t);//copy ten
    14.     }
    15.     nguoi()
    16.     {
    17.         ten=NULL;
    18.     //  nhap();
    19.     }
    20.  
    21.     virtual ~nguoi()
    22.     {
    23.         ten=NULL;
    24.         delete ten;
    25.     }
    26.     //virtual int khenthuong()=0;//phuong thuc thuan ao
    27.     virtual void nhap();//phuong thuc ao
    28.     virtual void xuat();//phuong thuc ao
    29. };
    30. void nguoi::nhap()
    31. {
    32.     ten = new char[30];
    33.     cout<<"Nhap ten: ";
    34.     cin.getline(ten, 30);
    35. }
    36. void nguoi::xuat()
    37. {
    38.     cout<<"Ho ten: "<<ten;
    39. }
    40. int main()
    41. {
    42.     nguoi A;
    43.    A.nhap();
    44.     A.xuat();
    45.     return 0;
    46. }
    Đã được chỉnh sửa lần cuối bởi thienthan34 : 19-04-2009 lúc 01:34 PM. Lý do: chuyển sang nhập chuỗi
    C++ Code:
    1. for(;;){cout<<"Busy"<<endl;}
    2. system("cls");
    Hãy ủng hộ cho quỹ phát triển cộng đồng C Việt
    http://congdongcviet.com/quyphattrien-congdongcviet.cpp

  10. #10
    Ngày gia nhập
    10 2008
    Bài viết
    178

    PHP Code:
    void nguoi::nhap()
    {
        
    char t;
        
    cout<<"Nhap ten: ";cin>>t;
        
    ten = new char(t);

    viết như thế này sao nhập được bác
    em nghĩ chuỗi thì nhập = cin.getline or cin.get mới được chứ
    PHP Code:
    void nguoi::nhap()
    {
        
    ten = new char[30];
        
    cout<<"Nhap ten: ";
        
    cin.getline(ten30);
    }
    void nguoi::xuat()
    {
        
    cout<<"Ho ten: "<<ten;


Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn