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 )
// 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 ???
+++ gọi hàm qua trọng nhất chỗ này chưa hiểu lắm : |
+++ còn 1 cái cuối là hàm
// 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:
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 ;
// 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ì đó }
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:
Comment