不可或缺 Windows Native (16) - C++: 函數重載, 預設參數, 內嵌函式, 函數模板

來源:互聯網
上載者:User

標籤:

[源碼下載]


不可或缺 Windows Native (16) - C++: 函數重載, 預設參數, 內嵌函式, 函數模板



webabcd


介紹
不可或缺 Windows Native 之 C++

  • 函數重載
  • 預設參數
  • 內嵌函式
  • 函數模板



樣本
1、函數重載, 預設參數
CppFunction1.h

#pragma once #include <string>using namespace std;namespace NativeDll{    class CppFunction1    {    public:        string Demo();    };}

CppFunction1.cpp

/* * 函數重載,預設參數 */#include "pch.h" #include "CppFunction1.h" #include "cppHelper.h" using namespace NativeDll;string CppFunction1::Demo(){    // 函數重載(overload) - 根據參數類型和個數做函數重載(不能僅按傳回值類型來做函數重載)    string function1_get();    string function1_get(string s1);    string function1_get(int i1);    string result1 = function1_get(); // function1_get    string result2 = function1_get("abc"); // function1_get abc    string result3 = function1_get(100); // function1_get 100    // 預設參數 - 函數參數允許有預設值,為某個參數提供預設值後,則必須為其後面的參數提供預設值    int function1_sum(int x, int y = 1, int z = 2);    int a = function1_sum(100); // 103    int b = function1_sum(100, 100); // 202    int c = function1_sum(100, 100, 100); // 300    return "看代碼及注釋吧";}// 如果函數參數有預設值,且有函式宣告的話,則預設值應該在函式宣告處指定(此時在函數定義處指定函數預設值是無效的)int function1_sum(int x, int y, int z) {     return x + y + z; }// 以下幾個函數用於示範函數重載string function1_get(){    return "function1_get";}/*不能僅按傳回值類型來做函數重載(有這句的話會編譯錯誤)int function1_get(){    return 100;}*/string function1_get(string s1){    return "function1_get " + s1;}string function1_get(int i1){    return "function1_get " + int2string(i1);}

 
2、內嵌函式, 函數模板
CppFunction2.h

#pragma once #include <string>using namespace std;namespace NativeDll{    class CppFunction2    {    public:        string Demo();    };}

CppFunction2.cpp

/* * 內嵌函式,函數模板 */#include "pch.h" #include "CppFunction2.h" using namespace NativeDll;void function2_demo1();void function2_demo2();string CppFunction2::Demo(){    // 內聯(inline)函數    function2_demo1();    // 函數模板(function template)    function2_demo2();    return "看代碼及注釋吧";}// 聲明一個 inline 函數(左側加 inline)inline int function2_max(int i, int j);// 內聯(inline)函數的使用void function2_demo1(){    int a = 1, b = 2;    int x;    // 內嵌函式(內建函數,內嵌函數,inline) - 在編譯時間將所調用函數的代碼直接嵌入到主調函數中    x = function2_max(a, b); // 2    /*    inline 函數會在編譯時間直接替換(類似宏替換),上面調用了 inline 函數,在編譯時間會被替換為如下代碼    if (a > b)        x = a;    x = b;    */}// 定義一個 inline 函數(左側加 inline)// 注意:從 inline 的原理看,其是以代碼膨脹(複製)為代價,省去了函數調用的開銷,從而提高函數的執行效率// 1、當函數包含複雜的控制語句,如迴圈語句或 switch 語句或遞迴之類的時,不宜用 inline 函數// 2、一般只將規模很小(5 句以下)且使用頻繁的函式宣告為 inline// 3、總之,如果不值當的(執行效率提高小,代碼膨脹大),建議不用 inlineinline int function2_max(int i, int j) {    if (i > j)        return i;    return j;}// 聲明一個函數模板,其有兩個不定類型,分別為 T1 和 T2(typename 和 class 沒有區別)template<typename T1, class T2>// 使用上面的函數模板中定義的類型,定義一個函數T1 function2_template(T1 a, T2 b, int c) // 使用了函數模板的函數就是模板函數{    if (a > b)        return a;    return a + 100;}/*這種寫法是錯誤的,因為推導不出傳回值的類型T2 function2_template(T1 a, T1 b){    if (a > b)        return 100    return 1000;}*/void function2_demo2(){    float result;    float i = 1.1f;    int j = 2;    // 調用指定的函數,此函數有不定類型的參數    result = function2_template(i, j, 0); // 101.1}



OK
[源碼下載]

不可或缺 Windows Native (16) - C++: 函數重載, 預設參數, 內嵌函式, 函數模板

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.