首頁 >後端開發 >C++ >C++ 中多態性如何支援委託和事件處理?

C++ 中多態性如何支援委託和事件處理?

WBOY
WBOY原創
2024-06-03 16:58:01799瀏覽

C++ 多態性透過虛擬函數和動態綁定實現,支援委託和事件處理。委託允許物件透過子類別物件呼叫基底類別方法,常用在回呼函數中。事件處理使用委託,當特定事件發生時執行程式碼。本文提供了兩個範例:委託範例展示子類別函數透過基底類別指標調用,事件處理範例透過按鈕監聽器處理按鈕點擊事件。

C++ 中多态性如何支持委托和事件处理?

C++ 中的多態性:委託和事件處理

##多態性是物件導向程式設計中的一項重要特性,它允許透過子類別物件呼叫基底類別方法。在 C++ 中,多態性透過虛函數和動態綁定來實現。

委託

委託是一種物件間通訊機制,它允許物件將某些任務或行為委託給另一個物件。委託通常用於實現回調函數,其中一個物件調用另一個物件的函數並等待其回應。

以下C++ 程式碼範例展示如何使用多態性實作委託:

#include <iostream>

using namespace std;

class Base {
public:
  virtual void print() const { cout << "Base" << endl; }
};

class Derived : public Base {
public:
  void print() const override { cout << "Derived" << endl; }
};

int main() {
  Base* b = new Derived();  // 多态性:Base 指针可以指向 Derived 对象
  b->print();  // 调用派生类函数
  return 0;
}

#事件處理

事件處理涉及在物件發生特定事件時執行某些代碼。在 C++ 中,可以使用委託來實作事件處理。

以下 C++ 程式碼範例展示如何使用多態性實作事件處理:

#include <iostream>

using namespace std;

class Button {
public:
  void click() const { if (_listener) _listener->buttonClicked(); }
  void setListener(ButtonListener* listener) { _listener = listener; }
private:
  ButtonListener* _listener = nullptr;
};

class ButtonListener {
public:
  virtual void buttonClicked() {}
};

class Form {
public:
  Form() : _button(new Button()) {}
  void setButtonListener(ButtonListener* listener) { _button->setListener(listener); }
private:
  Button* _button;
};

class MyListener : public ButtonListener {
public:
  void buttonClicked() override { cout << "Button clicked!" << endl; }
};

int main() {
  Form form;
  form.setButtonListener(new MyListener());
  form._button->click();
  return 0;
}

希望這些範例可以幫助您理解 C++ 中多態性如何支援委託和事件處理。

以上是C++ 中多態性如何支援委託和事件處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn