1、概念:與資料項相似,函式也有位址,函式的位址是儲存其機器語言**的記憶體的開始位址。獲取函式的位址很簡單:只要使用函式名(後面不跟引數)即可。也就是說,如果think()是乙個函式,則think就是該函式的位址。要將函式作為引數進行傳遞,必須傳遞函式名。(《c++ primer plus 中文版》(第五版 p216))
2、宣告函式指標:double(*pf)(int),即宣告了乙個函式指標,這個指標指向的函式是:引數為int,返回值為:double
3、賦值和呼叫
或用typedef定義#include
using namespace std;
double
func
(int a)
intmain()
// 輸出10
注:上面的例子中,p(10)和(*p)(10)等價。可以使用函式模板對函式指標進行初始化或賦值,這樣做的時候,編譯器使用指標的型別例項化具有適當模板實參的模板版本(《c++ primer 中文版》(第四版 p539))這句話我看了好幾遍,寫的實在太難理解了,我的理解:用函式模板對函式指標進行初始化或賦值的時候,編譯器就可以找乙個合適的函式進行呼叫。。。。#include
using namespace std;
typedef
double
(*p)
(int);
double
func
(int a)
intmain()
// 輸出10
1、包含編譯模型:編譯器必須看到用到的所有模板的定義。一般而言,可以通過在宣告函式模板或類模板的標頭檔案中新增一條 #include 指示使定義可用,如下:/*
* 下面這個例子是說,func裡面要傳遞不同的引數,但是在執行裡面**之前,要先判斷傳進來的引數的大小
* 如果把函式模板放入兩個函式,然後進行過載,會出現**的部分冗餘,因此這裡考慮用模板把公共操作提出來
*/#include
#include
#include
using namespace std;
// 定義乙個函式模板
template
intcompare
(const t &t1,
const t &t2)
// 兩個同名的函式,第乙個引數都是函式指標
void
func
(int
(*f)
(const
int&a,
const
int&b)
,int a,
int b)
void
func
(int
(*f)
(const
double
&a,const
double
&b),
double a,
double b)
intmain()
/*int 2
double 1
*/
main.cpp
new_h.h/*
* 下面這個例子是說,func裡面要傳遞不同的引數,但是在執行裡面**之前,要先判斷傳進來的引數的大小
* 如果把函式模板放入兩個函式,然後進行過載,會出現**的部分冗餘,因此這裡考慮用模板把公共操作提出來
*/#include
#include
#include
#include
"new_h.h"
using namespace std;
// 定義乙個函式模板
intmain()
/*int 2
double 1
*/
learn_temp.cpp#ifndef new_h_h
#define new_h_h
#include
using namespace std;
void
show()
;#include
"learn_temp.cpp"
template
intcompare
(const t&
,const t&);
void
func
(int
(*f)
(const
int&a,
const
int&b)
,int a,
int b)
;void
func
(int
(*f)
(const
double
&a,const
double
&b),
double a,
double b)
;#endif
test1.cpptemplate
intcompare
(const t&a,
const t&b)
結果:#include
"new_h.h"
void
show()
void
func
(int
(*f)
(const
int&a,
const
int&b)
,int a,
int b)
void
func
(int
(*f)
(const
double
&a,const
double
&b),
double a,
double b)
int 2
double 1
show
show
函式模板與模板函式
1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template 返回型別 函式名 參數列 其中,template是定義模板函式的關鍵字...
C 函式模板與普通函式
當我們要對不同的資料型別進行同樣的操作的時候,我們可能要分別編寫幾個函式去對應資料型別進行相似的操作,比如說交換兩個資料 我們使用函式模板就會大大提高效率 示例 include using namespace std template typename t 宣告乙個模板,t是乙個通用資料型別 或te...
C 函式模板與類模板
一 函式模板 1 函式模板 建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬型別來代表這個通用函式來代表。凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函式時系統會根據實參的型別來取代模板中虛擬的型別,從而實現不同函式的功能。作用 功能相同...