項目 widget-area-1 尚未註冊或是沒有一個 view.php 檔案.
項目 widget-area-1 尚未註冊或是沒有一個 view.php 檔案.
項目 search-input 尚未註冊或是沒有一個 view.php 檔案.

【Modern C++ #3】 C++ virtual, override 筆記

前言

這邊整理一下 C++ virtual, override 的筆記

override (C++ 11)

我們先講個在 C++ 11 新出現的小東西「override」,
這個 override 語法上「可有可無」,
但有的好處是

  1. (重要) 當 Parent Class 沒有這個函數時,會報錯!!!
  2. (提醒,可讀性增加) 提醒我們這個函數有覆寫 Parent Class 的功能,提醒我們要注意!

為什麼第一點重要呢?
因為在 C++ 裡面有個功能叫做 overload (對,不是 override !!!),
白話文就是,我們可以有

  • foo(int)

我們在沒有寫 override 的情況下,如果在 Child class 寫了一個

  • foo(char)

是不會報錯的!!! 而且同時我們會有兩個函數可以使用

  • 來自繼承父類的: foo(int)
  • 來自子類新增的: foo(char)

但如果寫了 override 就會報錯了!!!
因為 foo(char) 在父類不存在!!! 因此就不會有上述的狀況!
很棒吧!

virtual function: Parent 有實作, Child 可以覆蓋 or 直接用父類實作

在一般的情況下,我們可以在 Parent 有先實作一些功能,類似 default 的設定。
如果子類有想要修改功能,可以直接 override 掉,也可以直接使用 Parent 的 default 設定來用。

範例程式碼

#include<iostream>
using namespace std;

class Papa {
public:
    virtual void foo() { cout << "foo in class Mama" << endl; }
    virtual void foo2() { cout << "foo2 in class Mama" << endl; }
};

class Child : public Papa {
public:
    void foo() override { cout << "foo in class Child" << endl; }
};

int main()
{
    Papa a;
    Child b;

    a.foo();
    b.foo();

    a.foo2();
    b.foo2();

    return 0;
}

結果

Pure virtual function: Parent 沒實作, 並強制要求 child 實作 (常用於建立 interface)

通常用於建立 interface,我們不實作,但要求繼承的使用者實作。
我們會用「= 0」作為函數宣告的內容。

這裡要注意,含有 Pure virtual 的 Parent Class,不能建立 instance,會報錯。

範例程式碼

#include<iostream>
using namespace std;

class Papa {
public:
    virtual void foo() = 0;
};

class Child : public Papa {
public:
    void foo() override { cout << "(Must do) foo in class Child" << endl; }
};

int main()
{
    // Papa a; can not be instance
    Child b;

    // a.foo();
    b.foo();

    return 0;
}

結果

Reference

⭐C++ 基礎用法 相關文章整理⭐:
1.【C++】C++ compile 程式碼 使用 c++ 11 與使用相關的 package
2.【C++】C/C++ 顯示資料的類別 (type) sample code (內含範例程式碼) print C data type, cout C++ data type, get variable type in c++
3.【C++】C++ 複製 2D array的方法 copy 2d array memcpy sample code (內含範例程式碼)
⭐Modern C++ ⭐:
⭐C++ 字串處理相關文章整理⭐:
1.【C++】字串 char string stringstream 相關用法總整理 (內含範例程式碼) 與利用 sprinf, snprinf assign 值的方法
2.【C++】字串 char string stringstream 「轉換」用法總整理 (內含範例程式碼)
3.【C】printf, fprintf, sprintf, snprintf 相關用法總整理 (內含範例程式碼)
4.【C++】C++ String 用法 連接兩個 String c++ string concat
⭐C++ 系統偵測相關文章整理⭐:
1.【C++】C++ 利用 dirent.h 計算資料夾的檔案數量 count files sample code (內含範例程式碼)
2.【C++】C++ inotify sample code 偵測指定路徑底下的文件變化 (內有範例程式碼)
⭐C++ OpenCV 相關文章整理⭐:
1.