この関数が1回だけ呼び出される理由

チョンヨン

私は読んでいましたThe C++ Programming Language 3rd edition第15章(398ページ)では、小さな例を示しています。

class Window {
public:
    virtual void draw() { //sth }
};
class Window_with_border : public virtual Window {
public:
    void own_draw() { //sth }
    void draw() {Window::draw(); own_draw();}
};
class Window_with_menu : public virtual Window {
public:
    void own_draw() { //sth }
    void draw() {Window::draw(); own_draw(); }
};
class Clock : public Window_with_border, public Window_with_menu {
public:
    void own_draw() { //sth }
    void draw() {Window::draw(); Window_with_border::draw(); Window_with_menu::draw(); own_draw(); }
}; 

そして、著者は述べているdraw()機能は、現在使用して書き込むことができるown_draw()いずれかの呼び出し側がそのような機能をdraw()取得しますWindow::draw()正確に一度だけ呼び出されます。

しかし、Clockオブジェクトを定義してdraw()を呼び出すと、3回呼び出されると思います。このような

Clock obj;
obj.draw() //The Window::draw() function got invoked three times?

私は正しいですか?

更新:申し訳ありませんが、コードを読み間違えました。正しいコードは次のとおりです。

class Clock : public Window_with_border, public Window_with_menu {
public:
    void own_draw() { //sth }
    void draw() {Window::draw(); Window_with_border::own_draw(); Window_with_menu::own_draw(); own_draw(); }
}; 

だから私は間違っていた。

firda

より長い説明:それは著者が話していることです-それはWindow::draw()3回呼ばれます:

  1. Window :: draw();
  2. Window_with_border :: draw();
  3. Window_with_menu :: draw();

最初のものを省略して、次のように書き直すことができます。

class Clock : public Window_with_border, public Window_with_menu {
public:
    void own_draw() { //sth }
    void draw() {
        Window_with_border::draw();
        Window_with_menu::draw();
        own_draw(); }
};

しかし、それでも2回なので、最終的には次のようになります。

class Clock : public Window_with_border, public Window_with_menu {
public:
    void own_draw() { //sth }
    void draw() {
        Window::draw();
        Window_with_border::own_draw();
        Window_with_menu::own_draw();
        own_draw(); }
};

または:

class Clock : public Window_with_border, public Window_with_menu {
public:
    void own_draw() { //sth }
    void draw() {
        Window_with_border::draw();
        Window_with_menu::own_draw();
        own_draw(); }
};

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

このF#関数が1回だけ実行されるのはなぜですか?2回呼び出すと、1回だけ実行されます

分類Dev

SaxonXSLT。1回だけ呼び出される拡張関数

分類Dev

setInterval関数が1回だけ呼び出されるのはなぜですか?

分類Dev

1回の呼び出しでODEの導関数が呼び出された回数を見つける方法。

分類Dev

JS初心者:forループ内のこの関数が1回だけ呼び出されるのはなぜですか?

分類Dev

BluetoothGattCallBack関数onCharacteristicReadは1回だけ呼び出されます

分類Dev

引数が1回だけ呼び出されるPythonデコレータ

分類Dev

すべての要素が1回だけ呼び出されるArrayListの反復

分類Dev

RecyclerView onBindViewHolderが1回だけ呼び出されるのはなぜですか?

分類Dev

JSの使用クリック関数を1回だけ呼び出す方法。これは.onejQueryと同等です。

分類Dev

クリック関数が2回呼び出されますが、最初のクリックだけですか?

分類Dev

UI-ルーターの解決関数は1回だけ呼び出されます

分類Dev

空手フレームワークでJS関数が1回だけ呼び出されるのに、何度も呼び出されるのはなぜですか?

分類Dev

onChange = "myFunction()"が私の関数を1回だけ呼び出しているようですか?

分類Dev

widgetPerformUpdateWithCompletionHandlerが1回だけ呼び出されます

分類Dev

widgetPerformUpdateWithCompletionHandlerが1回だけ呼び出されます

分類Dev

requestedUpdateDidBeginが1回だけ呼び出されました

分類Dev

Cで、pthread_onceなしで関数が1回だけ呼び出されるようにする方法はありますか?

分類Dev

onPostExecute()は1回だけ呼び出されるようです

分類Dev

この関数は一度だけ呼び出されますか?

分類Dev

複数の呼び出しを後付けして必要なものが返された場合に、ユーザーに1回だけ通知する方法は?

分類Dev

JavaScript関数は、毎回ではなく1回だけ呼び出されます

分類Dev

jQuery:関数が2回呼び出されます。伝搬?なぜこれが起こるのですか?

分類Dev

FBSDKGraphRequest(graphPath: "me"、parameters:params).startが1回だけ呼び出されるのはなぜですか

分類Dev

Python-入力が変更されるまで、特定の部分を1回だけ呼び出す

分類Dev

プライベート変数が呼び出されるのに、1回しか増加しない理由

分類Dev

def関数は、(while)ループごとに2回繰り返されますが、それぞれ1回だけ呼び出しました。

分類Dev

PHP-execute()が1回だけ呼び出されたときに2回実行されるPDOクエリ

分類Dev

2つの関数呼び出しが表示されたトレースは1つだけ

Related 関連記事

  1. 1

    このF#関数が1回だけ実行されるのはなぜですか?2回呼び出すと、1回だけ実行されます

  2. 2

    SaxonXSLT。1回だけ呼び出される拡張関数

  3. 3

    setInterval関数が1回だけ呼び出されるのはなぜですか?

  4. 4

    1回の呼び出しでODEの導関数が呼び出された回数を見つける方法。

  5. 5

    JS初心者:forループ内のこの関数が1回だけ呼び出されるのはなぜですか?

  6. 6

    BluetoothGattCallBack関数onCharacteristicReadは1回だけ呼び出されます

  7. 7

    引数が1回だけ呼び出されるPythonデコレータ

  8. 8

    すべての要素が1回だけ呼び出されるArrayListの反復

  9. 9

    RecyclerView onBindViewHolderが1回だけ呼び出されるのはなぜですか?

  10. 10

    JSの使用クリック関数を1回だけ呼び出す方法。これは.onejQueryと同等です。

  11. 11

    クリック関数が2回呼び出されますが、最初のクリックだけですか?

  12. 12

    UI-ルーターの解決関数は1回だけ呼び出されます

  13. 13

    空手フレームワークでJS関数が1回だけ呼び出されるのに、何度も呼び出されるのはなぜですか?

  14. 14

    onChange = "myFunction()"が私の関数を1回だけ呼び出しているようですか?

  15. 15

    widgetPerformUpdateWithCompletionHandlerが1回だけ呼び出されます

  16. 16

    widgetPerformUpdateWithCompletionHandlerが1回だけ呼び出されます

  17. 17

    requestedUpdateDidBeginが1回だけ呼び出されました

  18. 18

    Cで、pthread_onceなしで関数が1回だけ呼び出されるようにする方法はありますか?

  19. 19

    onPostExecute()は1回だけ呼び出されるようです

  20. 20

    この関数は一度だけ呼び出されますか?

  21. 21

    複数の呼び出しを後付けして必要なものが返された場合に、ユーザーに1回だけ通知する方法は?

  22. 22

    JavaScript関数は、毎回ではなく1回だけ呼び出されます

  23. 23

    jQuery:関数が2回呼び出されます。伝搬?なぜこれが起こるのですか?

  24. 24

    FBSDKGraphRequest(graphPath: "me"、parameters:params).startが1回だけ呼び出されるのはなぜですか

  25. 25

    Python-入力が変更されるまで、特定の部分を1回だけ呼び出す

  26. 26

    プライベート変数が呼び出されるのに、1回しか増加しない理由

  27. 27

    def関数は、(while)ループごとに2回繰り返されますが、それぞれ1回だけ呼び出しました。

  28. 28

    PHP-execute()が1回だけ呼び出されたときに2回実行されるPDOクエリ

  29. 29

    2つの関数呼び出しが表示されたトレースは1つだけ

ホットタグ

アーカイブ