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

Đề tài: [ Solved ]Ai biết static binding+dynamic binding ko?

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

    Mặc định [ Solved ]Ai biết static binding+dynamic binding ko?

    Đầu tiên là mình muốn nói với admin một câu:Cái email kick hoạt tài khoản của forum sao lại nằm ngay trong mục spam email cua tôi.Cái này admin phải xem lại nha.
    ____________________________________________

    Còn đây là nội dung chính:Có bác nào biết cơ chế kết nối động và cơ chế kết nối tĩnh ko?Cơ chế làm việc của chúng ra sao,trong sách nó ghi ko dễ hiểu mấy nên phải lên đây nhờ cậy anh em.thanks!

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

    - Trả lời cho cái câu hỏi "đầu tiên" của cậu : lần sau cái này cậu post vào hỏi đáp khác.
    - Còn về câu hỏi static binding và dynamic binding : cậu học qua virtual method chưa ?

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

    sao cậu này lại nói linh tinh trên diễn đàn thế
    Đầu tiên là mình muốn nói với admin một câu:Cái email kick hoạt tài khoản của forum sao lại nằm ngay trong mục spam email cua tôi.Cái này admin phải xem lại nha.
    hỏi mỗi câu ở tiêu đề rồi post linh tinh,cậu thử nói xem cậu gặp khó khăn ở đâu,công đoạn nào,đang định làm gì mà sao gặp khó để người khác biết cậu đang làm gì chứ

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

    rất xin lỗi về việc post nhầm chỗ,nhưng đây ko phải là chủ đề chính.

    thực tình thì em đang vướng mắc ở tính đa hình của lập trình hướng đối tượng đây,em cũng đã đọc qua cái virtual method rồi,nhưng em không hiểu ở cái chỗ thế nào là dynamic binding,em ko hiểu cơ chế làm việc của nó.
    Trong sách em có ghi thế này:Khi nhận thấy có khai báo virtual trong lớp cơ sở,trình biên dịch sẽ nhận thêm vào mỗi đối tượng của lớp cơ sở và các lớp dẫn xuất của nó một con trỏ chỉ đến băng phương thức ảo(virtual function table).Con trỏ đó có tên là vptr(virtual pointer).Bảng phương thức ảo là nơi chứa các con trỏ chỉ đến đoạn chương trình đã biên dịch ứng với các phương thức ảo.Mỗi lớp có một bảng phương thức ảo.Mỗi phương thức ảo chỉ lập bảng phương thức ảo khi bắt đầu có việc tạddooids tượng của lớp.Đến khi chương trình chạy,phương thức ảo của đối tượng mới được kết nối và thi hành thông qua con trỏ vptr

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

    C++ Code:
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5. class Base
    6. {
    7. public :
    8.     void show( std::ostream& out ) const
    9.     {
    10.         out << "I'm Base !";
    11.     }
    12. };
    13.  
    14. class Derived : public Base
    15. {
    16. public :
    17.     void show( std::ostream& out ) const
    18.     {
    19.         out << "I'm Derived !";
    20.     }
    21. };
    22.  
    23.  
    24. void showBaseOrDerive( const Base& obj )
    25. {
    26.     obj.show( cout );
    27. }
    28.  
    29. int main()
    30. {
    31.     Derived obj;
    32.  
    33.     showBaseOrDerive( obj );
    34.  
    35.     return 0;
    36. }

    - Code trên sẽ in ra derived class. Cái này gọi là binding.
    - Khi mà chương trình chạy thì hàm show() của class Base đã được xác định bởi compile cho nên nó sẽ xuất ra "I'm Base" Và cái tiến trình mà để compiler biết hàm nào sẽ được gọi tại compile time gọi là static binding.
    - Khi cậu bỏ virtual vào cả 2 thì nó trở thành dynamic binding và compile lúc này nó sẽ biết thằng nào để gọi chính xác, chính là cái v-table mà cậu nói ở trên.
    C++ Code:
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5. class Base
    6. {
    7. public :
    8.     void virtual show( std::ostream& out ) const
    9.     {
    10.         out << "I'm Base !";
    11.     }
    12. };
    13.  
    14. class Derived : public Base
    15. {
    16. public :
    17.     virtual void show( std::ostream& out ) const
    18.     {
    19.         out << "I'm Derived !";
    20.     }
    21. };
    22.  
    23.  
    24. void showBaseOrDerive( const Base& obj )
    25. {
    26.     obj.show( cout );
    27. }
    28.  
    29. int main()
    30. {
    31.     Derived obj;
    32.  
    33.     showBaseOrDerive( obj );
    34.  
    35.     return 0;
    36. }

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

    Mặc định [ Solved ]Ai biết static binding+dynamic binding ko?

    Trích dẫn Nguyên bản được gửi bởi forever_and_one Xem bài viết
    rất xin lỗi về việc post nhầm chỗ,nhưng đây ko phải là chủ đề chính.

    thực tình thì em đang vướng mắc ở tính đa hình của lập trình hướng đối tượng đây,em cũng đã đọc qua cái virtual method rồi,nhưng em không hiểu ở cái chỗ thế nào là dynamic binding,em ko hiểu cơ chế làm việc của nó.
    Trong sách em có ghi thế này:Khi nhận thấy có khai báo virtual trong lớp cơ sở,trình biên dịch sẽ nhận thêm vào mỗi đối tượng của lớp cơ sở và các lớp dẫn xuất của nó một con trỏ chỉ đến băng phương thức ảo(virtual function table).Con trỏ đó có tên là vptr(virtual pointer).Bảng phương thức ảo là nơi chứa các con trỏ chỉ đến đoạn chương trình đã biên dịch ứng với các phương thức ảo.Mỗi lớp có một bảng phương thức ảo.Mỗi phương thức ảo chỉ lập bảng phương thức ảo khi bắt đầu có việc tạddooids tượng của lớp.Đến khi chương trình chạy,phương thức ảo của đối tượng mới được kết nối và thi hành thông qua con trỏ vptr
    đối với code thì bạn rox_rook đã đưa ra và giải thích rõ cho bạn về thế nào là static binding và dynamic binding rồi.
    mình chỉ xin nói thêm 1 ý nữa là các vptr và vftbl là 2 đối tượng mà trình biên dịch dùng để kiểm soát(quản lý) các hàm virtual(ảo) của chương trình bạn viết ra.
    lúc đầu nó sẽ giữ địa chỉ của phương thức ảo trong lớp cơ sở. sau đó ứng với từng đối tượng gọi tương ứng nó sẽ gán chính xác phương thức được override của lớp mà đối tượng đang gọi thuộc về(thông qua các cách cấp phát bộ nhớ).


    chúc bạn thành công.

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

  1. C++ Tutorial Virtual table trong việc dynamic binding phương thức virtual
    Gửi bởi luc13aka47 trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 19-04-2016, 08:56 PM
  2. binding trường giới tính sử dụng checkbox
    Gửi bởi asutaka trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 30-05-2013, 10:29 AM
  3. binding như thế này thì làm sao?
    Gửi bởi nguyen_hung5716 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 15-10-2012, 03:10 PM
  4. binding trong sắp xếp lịch
    Gửi bởi gatrongpro trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 27-11-2011, 12:24 AM
  5. Dynamic Binding (with hiding) tác dụng như thế nào?
    Gửi bởi QuangHoang trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 11-07-2009, 09:37 AM

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