Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: [ Solved ]Thắc mắc về Kế thừa

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

    Wink [ Solved ]Thắc mắc về Kế thừa

    Code:
    class stack:private linkedlist{
    public:
    	stack(){
    		//linkedlist::linkedlist();// có cần thiết không ?
    	}
    	~stack(){
    		//linkedlist::~linkedlist();// có cần thiết không ?
    	}
    	bool stpush(datatype x){
    		return inserthead(x);
    	}
    	datatype stpop(){
    		return getheaddata();
    	}
    	datatype sttop(){
    		return headdata();
    	}
    	void display(){
    		linkedlist::display();
    	}
    };
    Với class linkedlist là1 lớp đã đc khái báo từ trước.
    1) mình muốn hỏi sự khác nhau trong khai báo constructor giữa kế thừa public và private ? Mình đọc sách gòi nhưng còn hơi mơ hồ ( đa số sách chỉ viết kế thừa public )
    2)Khai báo Stack là kế thừa private của linkedlist như trên thì constructor của stack mình có cần gọi lại constructor của linkedlist hay ko ? cả hàm destructor nữa ? Nếu là dẫn xuất public thì liệu nó có còn đúng không nhỉ ?? Mình mún phân biệt rõ giữa 2 cái kế thừa này ! Ai biết thì chỉ giúp nha ! Cám ơn nhìu

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    stack(){
    //linkedlist::linkedlist();// có cần thiết không ?
    }
    ~stack(){
    //linkedlist::~linkedlist();// có cần thiết không ?
    }
    You don't have to.
    private inheritance nghĩa là :
    - tất cả mọi thứ trong lớp cha sẽ là private trong lớp con.
    Ví dụ :
    tui có lớp :
    C++ Code:
    1. class Animal{
    2. public :
    3.   void eatRawMeat();
    4.   void sleep();
    5. };
    6.  
    7. class Person : private Animal {
    8. public :
    9.   void eatCookMeat{
    10.      Animal::eatRawMeat();
    11.   }  
    12. }
    Khi nào muốn giới hạn tạo 1 đối tượng trong main() thuộc lớp con mà không muốn nó gọi trực tiếp đến hàm của lớp cha thì dùng private inheritance, nghĩa là :
    - Động vật có thể ngủ, có thể ăn.
    - Con người cũng có thể ăn ngủ, nhưng nếu trong main() mà cho con người ăn thịt sống thì làm sao giống người được ? Vậy cách này chỉ có thể tiết kiệm code mà thôi. Private inheritance cũng có thể hiểu như composition. Nhưng nên dùng composition thì code dễ đọc hơn.
    2 cách ghi :
    + : private Animal
    + : Animal
    là giống nhau, nhưng ghi ra private thì rõ ràng hơn thôi.
    Một ví dụ nữa :
    C++ Code:
    1. class Animal{
    2. public :
    3.     char eat() const{
    4.         return 'a';
    5.     }
    6.     int speak() const {
    7.         return 7;
    8.     }
    9.     float sleep() const{
    10.         return 5.0;
    11.     }
    12. };
    13.  
    14. class Fish : Animal { //private inheritance
    15. public :
    16.     using Animal::eat;
    17.     using Animal::sleep;
    18. };
    19.  
    20. int main(){
    21.     Fish Nemo;
    22.     Nemo.eat();
    23.     Nemo.sleep();
    24.    
    25.     Nemo.speak(); //Ặc, con cá làm sao nói hả cha :-o
    26. };
    Ý nghĩa thực dụng duy nhất của pr.Inherit mà theo tui được biết là chỉ dùng empty base class nhằm để tiết kiệm bộ nhớ khi phải viết thư viện mà thôi, nhưng phần này tuơng đối rắc rối, tạm thời chỉ cần dùng public kế thừa là ok.
    Qui luật : mọi thành viên được kế thừa ( private ) từ lớp cha sẽ trở thành private trong lớp con dù chúng có là public hay protected đi chăng nữa trong lớp cha cũng vậy.

Các đề tài tương tự

  1. [ Solved ]Thắc mắc về chương trình in ra chữ Việt
    Gửi bởi thichgame trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 10
    Bài viết cuối: 28-11-2008, 06:39 AM
  2. [ Solved ]Một bài toán thú vị
    Gửi bởi Mr tiger tide trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 23-08-2008, 06:39 AM
  3. [ Solved ] Làm thế nào để trở thành 1 developer giỏi.
    Gửi bởi quachnguyen trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 19-08-2008, 05:57 PM
  4. [ Solved ]Một số thắc mắc về OOP
    Gửi bởi the-misery trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 21-05-2008, 06:08 PM
  5. [ Solved ]Như thế này có gọi là use hàm ảo + đa hình không?
    Gửi bởi minhduc0912 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 17-04-2008, 07:22 PM

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