2010-06-28 18 views
10

Tôi đã quen với việc sử dụng các giao thức Objective-C trong mã của mình; chúng thật đáng kinh ngạc với rất nhiều thứ. Tuy nhiên, trong C + + tôi không chắc chắn làm thế nào để thực hiện điều tương tự. Dưới đây là một ví dụ:Câu hỏi C++: tính năng tương tự với giao thức Obj-C?

  1. Bảng xem, trong đó có một chức năng setDelegate (Nghị định thư * đại biểu)
  2. Đại biểu lớp Class, nhưng việc thực hiện các giao thức 'Protocol'
  3. Đại biểu lớp Class2, cũng thực hiện 'Nghị định thư '
  4. setDelegate (objOfClass) và setDelegate (objOfClass2) đều hợp lệ

trong obj-C này là đủ đơn giản, nhưng tôi không thể tìm ra cách để làm điều đó trong C++. Thậm chí có thể không?

Trả lời

16

Về cơ bản, thay vì "Giao thức" nghĩ "lớp cơ sở có hàm ảo thuần túy", đôi khi được gọi là giao diện bằng các ngôn ngữ khác.

class Protocol 
{ 
public: 
    virtual void Foo() = 0; 
}; 

class Class : public Protocol 
{ 
public: 
    void Foo() { } 
}; 

class Class2 : public Protocol 
{ 
public: 
    void Foo() { } 
}; 

class TableView 
{ 
public: 
    void setDelegate(Protocol* proto) { } 
}; 
+0

Cảm ơn, ngoại trừ việc tôi có một vấn đề với điều đó. Các lớp khác nhau, tức là Lớp và Lớp 2, là các lớp con. –

+1

@ jfm429, đó là lý do tại sao các lớp học có thể có nhiều tổ tiên. – avakar

+0

Ah, tôi quên mất điều đó. Tôi có thể thấy rất nhiều vấn đề với nó, đặc biệt với một số cấu trúc lớp cụ thể mà tôi đã sử dụng trong quá khứ (tôi đã nghiên cứu đơn/đa thừa kế trước và có ưu và khuyết điểm, chủ yếu là khuyết điểm) nhưng trong tình huống này nó đã thắng ' t gây ra bất kỳ vấn đề. –