1. 程式人生 > >函式指標和函式物件詳解

函式指標和函式物件詳解

一、函式指標

在C++中,指標本質就是記憶體中的某個地址,如果該記憶體地址中存放的是某個資料,那麼這個指標就是常見的資料指標,如果這個記憶體地址中存放的是某個函式,那麼這個指標就是函式指標。
C++中每一個函式都有一個入口地址,該入口地址就是函式指標所指向的記憶體地址,有了指向函式的指標變數後,就可以用這個函式指標變數呼叫函式,如果用資料指標變數可以引用它所指向的資料一樣。
C++程式碼經過編譯後,每一個函式都有一個入口地址,而函式名就代表這個入口地址。

函式指標宣告語法:
函式返回值型別識別符號 (指標變數名)(形參列表)
如:
void PrintPass(int nScore);


如果要宣告一個函式指標指向這個函式,則:
void (*pPrintFunc)(int nScore);

void (*pPrintFunc)(int);//省略形參名

函式指標的賦值可以直接通過將函式名賦值給函式指標名完成,也即函式名就是指向函式的指標:
pPrintFunc = PrintPass;

函式指標用處:
1、使用函式指標簡化呼叫函式過程
通過將不同函式對函式指標進行賦值,最終統一呼叫函式指標變數,實現統一介面呼叫不同函式的目的,簡化函式呼叫過程;
2、使用函式指標實現回撥函式

二、函式物件

函式物件( functor 或者 funtion objects )


#include<functional>
函式物件又稱之為仿函式。
所謂函式物件,就是定義了函式呼叫操作符(function-call operator),即operator()的普通類的物件。
函式物件將函式封裝在一個物件(其實是定義一個過載了operator()的普通類)中,使得它可作為引數傳遞給合適的STL 演算法,從而使演算法的功能得以擴充套件。
函式物件是一種設計成具有類似函式功能類的物件。在C++中,這可以在類中定義成員函式operator()來實現。
定義好函式物件類之後,就可以開始使用函式物件類建立相應的函式物件,並利用這些函式物件來進行具體的計算。函式物件作為一個具體的類的例項變數,它既可以單獨使用,也可以像函式指標一樣被當成引數傳遞給其他函式,並在其他函式中使用。
https://blog.csdn.net/a20102110080212/article/details/11675497?readlog

使用者可以定義自己的函式物件。下面讓我們來定義一個自己的函式物件。

#include <iostream>
using namespace std;

struct int_max{

int operator()(int x,int y){return x>y?x:y; }

};//operator() 過載了" ()" , (int x,int y) 是引數列表

int main()
{
    cout<<int_max() (3,4)<<endl;
    return 0;
}

這裡的 int_max () 就是一個函式物件, struct 關鍵字也可以用 class 來代替,只不過 struct 預設情況下是公有訪問許可權,而 class 定義的是預設私有訪問許可權。下面我們來定義一個STL 風格的函式物件:

相關推薦

函式指標函式物件

一、函式指標 在C++中,指標本質就是記憶體中的某個地址,如果該記憶體地址中存放的是某個資料,那麼這個指標就是常見的資料指標,如果這個記憶體地址中存放的是某個函式,那麼這個指標就是函式指標。 C++中每一個函式都有一個入口地址,該入口地址就是函式指標所指向的

虛擬函式,虛指標虛表

關於虛擬函式的背景知識 1. 用virtual關鍵字申明的函式叫做虛擬函式,虛擬函式肯定是類的成員函式。 2. 存在虛擬函式的類都有一個一維的虛擬函式表叫做虛表。每一個類的物件都有一個指向虛表開始的虛指標。虛表是和類對應的,虛表指標是和物件對應的

C++中的函式指標函式物件總結

篇一、函式指標函式指標:是指向函式的指標變數,在C編譯時,每一個函式都有一個入口地址,那麼這個指向這個函式的函式指標便指向這個地址。函式指標的用途是很大的,主要有兩個作用:用作呼叫函式和做函式的引數。函式指標的宣告方法:資料型別標誌符 (指標變數名) (形參列表);一般函式的宣告為:int func ( in

C++函式指標函式物件

C++裡有函式指標和函式物件,讓我們來看下這2個的區別 一 函式指標 我們在學習C/C++時,有時會要寫一個函式,這個函式的引數是另外一個函式,一種寫法如下, #include <iostream> using namespace std; vo

回撥函式函式指標函式物件

  對於回撥函式的編寫始終是寫特殊處理功能程式時用到的技巧之一。先介紹一下回調的使用基本方法與原理。   在這裡設:回撥函式為A()(這是最簡單的情況,不帶引數,但我們應用的實際情況常常很會複雜),使用回撥函式的操作函式為B(), 但B函式是需要引數的,這個引數就是指向函

函式指標 函式物件

函式指標: 函式指標:指向函式的指標變數。本身首先應是指標變數,只不過該指標變數指向函式。這正如用指標變數可指向整型變數、字元型、陣列一樣,這裡是指向函式。如前所述,C在編譯時,每一個函式都有一個入口地址,該入口地址就是函式指標所指向的地址。有了指向函式的指標變數後,可用該

函式指標函式物件的比較

一、函式指標 函式指標:是指向函式的指標變數,在C編譯時,每一個函式都有一個入口地址,那麼這個指向這個函式的函式指標便指向這個地址。 函式指標的用途是很大的,主要有兩個作用:用作呼叫函式和做函式的引數。 函式指標的宣告方法: 資料型別標誌符 (指標變數名

C++中的函式指標函式物件總結(轉)

篇一、函式指標函式指標:是指向函式的指標變數,在C編譯時,每一個函式都有一個入口地址,那麼這個指向這個函式的函式指標便指向這個地址。函式指標的用途是很大的,主要有兩個作用:用作呼叫函式和做函式的引數。函式指標的宣告方法:資料型別標誌符 (指標變數名) (形參列表);一般函式的宣告為: int func ( i

函式指標函式指標型別

參考:https://blog.csdn.net/candyliuxj/article/details/6339414 函式指標 1.     定義 每一個函式都佔用一段記憶體單元,它們有一個起始地址,指向函式入口地址的指標稱為函式指標。

Python-模型類-F()物件Q()物件

定義模型 from django.db import models from django.db.models import F, Q class Publisher(models.Model): """出版社""" name = models.CharField(ma

java Request物件Response物件

一:概述 Web伺服器收到客戶端的http請求,會針對每一次請求,分別建立一個用於代表請求的request物件、和代表響應的response物件 一、Response物件 1.Resonse的繼承結構: ServletResponse--H

JavaWeb之Request物件Response物件

一:概述 Web伺服器收到客戶端的http請求,會針對每一次請求,分別建立一個用於代表請求的request物件、和代表響應的response物件一、Response物件     1.Resonse的繼承結構:             ServletResponse--Ht

Request物件Response物件

Request 1.獲取請求的基本資訊 1>獲取請求的url和uri 2>獲取url後面的請求引數部分的字串 3>獲取請求方式 4>獲取主機名,IP地址 5>獲取 Contexpath String url = request.get

Java 儲存模型共享物件

Java 儲存模型和共享物件詳解 很多程式設計師對一個共享變數初始化要注意可見性和安全釋出(安全地構建一個物件,並其他執行緒能正確訪問)等問題不是很理解,認為Java是一個遮蔽記憶體細節的平臺,連物件回收都不需要關心,因此談到可見性和安全釋出大多不知所云。其實關鍵在於對Java儲存模型,可見性和

C++複習筆記(六)之函式指標函式模板、類模板

一、函式指標 函式指標在C語言中的作用類似於c++中的多型,都是可以實現框架的搭建,程式碼的相容性高。 函式三要素:名稱、引數、返回值 C語言可以通過typedef為函式型別重新命名,語法 typedef  返回值型別(型別名稱)(引數列表);如下程式碼所示: #in

函式指標函式指標陣列及其應用

1. 函式指標 先來看一個簡單的例子。 int a=3; void *p=&a; 這是一個基礎的不能再基礎的例子。相信學過指標的都能看得懂。P是一個指標,指向a。a 是一個整形變數。 函式指標和其類似,只不過其指向的不是一個變數,而是一個函式,僅此而已。話不多

objective-c 類物件中靜態資料成員靜態成員函式(類方法)

作為初學者,相信大家都對objective-c的靜態資料成員和靜態成員函式都挺糾結的,我現在和大家分享下我對這個知識點的理解,請大家多多指點.... 如果大家學過C++,那麼都應該知道和了解靜態資料成

Django中聚合函式,F表示式Q表示式

學習聚合函式的準備工作 新建一個專案,在新建一個app,名字隨意,然後在app中的models中定義幾個模型: from django.db import models # Create your models here. class Author(models.Model):

C++子類父類成員函式的覆蓋隱藏例項

https://www.jb51.net/article/117380.htm函式的覆蓋   覆蓋發生的條件:(1) 基類必須是虛擬函式(使用virtual 關鍵字來進行宣告) (2)發生覆蓋的兩個函式分別位於派生類和基類 (3)函式名和引數列表必須完全相同函式的隱藏   

指標陣列、陣列指標函式指標函式指標陣列

總結指標和陣列部分的相關知識自己寫的一遍部落格:指標是變數單元的地址,地址指向該變數單元,因此地址形象的稱為“指標”,通過指標(地址)可以找到記憶體單元。  (總結)1.指標是存放地址才出現的,地址是為