Announcement

Collapse
No announcement yet.

thắc mắc câu lệnh gán , sự kế thừa và cấu trúc dữ liệu

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C++] thắc mắc câu lệnh gán , sự kế thừa và cấu trúc dữ liệu

    hiện tại em đang học đến cấu trúc dữ liệu mà nhiều cái còn chưa hiểu quá
    giả sử có đoạn code tóm tắt ( cái này em viết chắc có chỗ ko đúng về syntax )

    Code:
    class A {
    public :
     
       void ham1() ; 
       virtual  void ham2() ; // hàm này được override ở class C 
    
    } ;
    
    class B {}
    
    class C : public A
    {
       public :
         
       int* x;
       B*  m;   
       void ham3();
       void hamfreeobject() // hàm này để free object và con trỏ  
              
             { delete m ; m = null ; }
    
       protected :
       void ham2();
       {
        B* p = new B(); 
        p->next = m ; // trong B có con trỏ next kiểu B* 
        m = p ;
    // chỗ này chưa hiểu p->next = m thì m ở đây là null ( sau này được gọi hàm 3 trước khi gọi hàm 2 ) hay m chỉ là 1 con trỏ đơn thuần ko trỏ vào đâu cả ??? như vậy p-> next sẽ trỏ cùng địa chỉ với m
    // sau đó p lại được gán cho m tức là m lại trỏ đến cùng địa chỉ với p
    // như vậy ở đây có tính chất bắc cầu không ? tức là p->next = cùng địa chỉ với p hay là m độc lập với p->next nên m trỏ đi đâu thì không ảnh hưởng và p->next chỉ thay đổi khi gán trực tiếp vào nó ???
    // e giả sử m = null ( tức là ham3 có tạo ra 1 object ) thì em giải thích đọan code ham2 như sau :
    1 : khởi tạo object
    2 : p->next = null ;
    3 : gán p vào m ??? em thấy đây là linked list dạng vòng với code trên là tạo ra danh sách và chèn thêm vào đầu danh sách ( giả sử cho thêm vòng lặp vao ham2)
    // gán p và m tức là để m lưu tạm địa chỉ object hiện tại có đúng không ???
    rồi khi vòng lặp sau khi đã tạo ra object mới thì next sẽ trỏ tới object trước đó ???
    // nhưng cái này em không thấy giống hẳn danh sách liên kết vòng ???

    Code:
       public:
       C()
       {
       m = null;
       }
    };


    +++ gọi hàm qua trọng nhất chỗ này chưa hiểu lắm : |
    Code:
      C::ham3(){
    
    return ham1() ;  // gọi hàm chỗ này là như nào ?
                           //theo e biết gọi ham1 thì cần 1 instance object của class C 
                           //hoặc class A vậy chỗ này có object nào không ? 
                           //nếu có thì hàm khởi tạo không đối có được gọi không ???   
    }
      hoặc C::ham3(){
                    
                    hamfreeobject();
                    return ham1; 
        // hoặc gọi như này với cùng câu hỏi như trên hàm free object để reset biến m = null 
    }

    +++ còn 1 cái cuối là hàm

    Code:
    void isEmtry() {
      return head == null 
    }
    // hàm này thực hiện khi head == null hay là hàm này thực hiện và gán head = null 
     tức là head = null sẵn hay hàm này làm cho head = null ???
    // gọi hàm 
    if ( ! isEmtry () )
    { 
     // làm gì đó 
    }
    // và liệu trong câu lệnh if thí isEmtry có được tính là 1 câu lệnh thực sự hay không ?
    hay là lệnh tạm tức là không thể thay đổi biến hay giá trị gì đó ???
    // vì e thấy nhiều người lợi dụng câu lệnh if để viết luôn tắt lại ???
    bìa hơi dài :sogood::sogood: mong các bạn nhiệt tình xem giúp mình thanks :boss:
    Last edited by ratlaga93; 30-12-2013, 10:41. Reason: thêm thẻ code

  • #2
    uppppppppp ai giải thích dùm em với ! udency:
    học trên lớp chán nhanh quá hỏi han cũng khó udency:

    Comment


    • #3
      Các tag CODE vẫn chưa được thêm đúng cách. Em tiếp tục sửa lại cho đúng may ra có người chịu đọc, sau 24h nữa mà vẫn chưa sửa thì tôi xóa topic này.

      Comment

      LHQC

      Collapse
      Working...
      X