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ố 16 kết quả

Đề tài: Sử dụng toán tử >> và << cho lớp kế thừa

  1. #1
    Ngày gia nhập
    06 2007
    Bài viết
    22

    Thumbs down Sử dụng toán tử >> và << cho lớp kế thừa

    em có một lớp kế thừa ,đã định nghĩa hàm friend nhập ,xuất cho lớp cơ sở ,sau đó em tái sử dụng cho lớp kế thừa mà không biết nó sai chỗ nào !ai biết thì giúp em với :
    Code:
    #include"iostream"
    #include"string"
    
    using namespace std;
    class CNguoi
    {
    protected:
    	char m_strHoTen[30];
    	int m_iTuoi;
    	char m_strDiaChi[30];
    public:
    	friend istream & operator>>(istream & is,CNguoi& x)
    	{
    		fflush(stdin);
    		cout<<"Nhap ten :";
    		is.getline(x.m_strHoTen,30);
    		cout<<"nhap tuoi :";
    		is>>x.m_iTuoi;
    		fflush(stdin);
    		cout<<"Nhap dia chi :";
    		is.getline(x.m_strDiaChi,30);
    		return is;
    	}
    	friend ostream & operator<<(ostream &os,CNguoi &x)
    	{
    		os<<"Ten :"<<x.m_strHoTen<<endl;
    		os<<"Tuoi :"<<x.m_iTuoi<<endl;
    		os<<"Dia chi :"<<x.m_strDiaChi;
    		return os;
    	}
    };
    class CHocSinh   :public CNguoi
    {
    protected:
    	float m_fToan;
    	float m_fVan;
    	float m_fDTB;
    public:
    	friend istream & operator>>(istream &is,CHocSinh &x)
    	{
    		is>>(CNguoi)x;//thay bang cin>>(CNguoi)x cung khong duoc
    		cout<<"Nhap diem toan :";
    		is>>x.m_fToan;
    		cout<<"Nhap diem van :";
    		is>>x.m_fVan;
    		x.m_fDTB = (x.m_fVan + x.m_fToan  )/2;
    		return is;
    	}
    	friend ostream & operator<<(ostream &os,CHocSinh &x)
    	{
    		os<<(CNguoi)x;//thay bang cout<<(CNguoi)x cung khong duoc
    		os<<"ho ten :"<<x.m_strHoTen<<endl;
    		os<<"toan :"<<x.m_fToan<<"  van :"<<x.m_fVan;
    		os<<"  DTB :"<<x.m_fDTB;
    		return os;
    	}
    };
    
    void main()
    {
    	CHocSinh obj;
    
    	cin>>obj;
    	cout<<obj;
    }
    Hi vọng và có lẽ không thất vọng

  2. #2
    Ngày gia nhập
    10 2007
    Bài viết
    9

    Chẳng qua là friend không kế thừa được.

  3. #3
    Ngày gia nhập
    06 2007
    Bài viết
    22

    vậy có cách gì tái sử dụng toán tử >> và toán tử << cho lớp kế thừa không?

  4. #4
    Ngày gia nhập
    10 2007
    Bài viết
    9

    Bạn cần viết riêng lẻ các hàm friend, cách sử dụng tuơng tự, đừng đưa thuộc tính của lớp cha vào thôi.

  5. #5
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Không được là ko được ở chỗ nào. Bạn nói rõ xem.
    Keep moving forward!

    ... Retired ...

  6. #6
    Ngày gia nhập
    06 2007
    Bài viết
    22

    Mặc định Sử dụng toán tử >> và << cho lớp kế thừa

    không được ở chổ là "khi chạy vào hàm >> của lớp CHocSinh nó vẫn chạy >> của lớp CNguoi(do ép kiểu +em có định nghĩa thêm copy constructor...) nhưng khi thoát khỏi hàm đó
    Code:
    is>>(CNguoi)x;//thay bang cin>>(CNguoi)x cung khong duoc
    ngay khi thoát thì toàn bộ phần mình nhập(m_strTen,m_iTuoi,m_strDiachi ) vô biến mất và thay vào đó là rác!

  7. #7
    Ngày gia nhập
    06 2007
    Bài viết
    22

    @vnHackk :mục đích của mình là tái sử dụng toán tử đã định nghĩa ở lớp cơ sở (chứ còn định nghĩa lại ở lớp dẫn xuất thì quá "bưởi" rồi!:

  8. #8
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    Hàm friend sao lại còn kế thừa
    Bây giờ cậu viết lại đi, một là để hàm friend rồi move phần thân 2 hàm đó ra khỏi class, hai là bỏ từ khóa friend đi. Rồi thì kiểm tra lại

  9. #9
    Ngày gia nhập
    06 2007
    Bài viết
    22

    để em test thử như thế!

  10. #10
    Ngày gia nhập
    06 2007
    Bài viết
    22

    vẫn không được! em test thử rồi ! nó vẫn thế

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