日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ Primer 5th笔记(chap 19 特殊工具与技术)成员函数指针

發布時間:2025/3/21 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ Primer 5th笔记(chap 19 特殊工具与技术)成员函数指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.

使用 classname::*的形式聲明一個指向成員函數的指針。

eg.

/ / pmf 是一個指針, 它可以指向 Screen 的某個常量成員函數 / / 前提是該函數不接受任何實參, 并且返回一個 char auto pmf = &Screen::get_cursor;
  • 指向成員函數的指針也需要指定目標函數的返回類型和形參列表
  • 如果成員函數是 const 成員 或者引用成員, 則我們必須將 const 限定符或引用限定符包含進來。

如果成員存在重載的問題, 則我們必須顯式地聲明函數類型以明確指出我們想要使用的是哪個函數

char (Screen::*pmf2) (Screen::pos, Screen::pos ) const; pmf 2 = &Screen::get;

括號不能少,否則編譯為

/ / 錯誤: 非成員函數 p 不能使用 const 限定符 char Screen::*p (Screen::pos, Screen::pos ) const;

在成員函數和指向該成員的指針之間不存在自動轉換規則:

/ / pmf 指向一個 Screen 成員 , 該成員不接受任何實參且返回類型是 char pmf = &Screen::get;/ / 必須顯式地使用取地址運算符 pmf = Screen::get;/ / 錯誤: 在成員函數和指針之間不存在自動轉換規則

2. 使用成員函數指針

.*或者->*運算符作用于指向成員函數的指針, 以調用類的成員函數:

Screen myScreen, *pScreen = &myScreen;//通過pScreen 所指的對象調用 pmf 所指的函數 char c1 = (pScreen->*pmf) ( );//通過 myScreen 對象將實參 0, 0 傳給含有兩個形參的 get 函教 char c2 = (myScreen.*pmf2 ) ( 0, 0 ) ;

2.1 使用成員指針的類型別名

/ / Action 是一種可以指向 Screen 成員函數的指針, 它接受兩個 pos 實參, 返回一個 char using Action = char (Screen::* ) (Screen::pos, Screen::pos ) const; Action get = &Screen::get; / / get 指向 Screen 的 get 成員

可以將指向成員函數的指針作為某個函數的返回類型或形參類型。 其中, 指向成員的指針形參也可以擁有默認實參:

// action接受一個Screen的引用和一個指向Screen成員函數的指針 Screen& action(Screen&, Action = &Screen::get);Screen myScreen; // 等價調用 action(myScreen); // 使用默認實參 action(myScreen, get); // 使用我們之前定義的變量get action(myScreen, &Screen::get); // 顯式地傳入地址

2.2 成員指針函數表

常見的用法是將其存入一個函數表當中

class Screen { public:// 其他接口和實現成員與之前一致// 這幾個函數共同點: 不接受任何參數, 并且返回值是發生光標移動的Screen的引用Screen& home(); // 光標移動函數Screen& froward();Screen& back();Screen& up();Screen& down(); } ->class Screen { public:// Action是一個指針, 可以用任意一個光標移動函數對其賦值using Action = Screen& (Screen::*)();// 指定具體要移動的放共享enum Directions { HOME, FORWARD, BACK, UP, DOWN };Screen& move(Directions); private:static Action Menu[]; // 函數表 };Screen& Screen::move(Directions cm) {// 運行this對象中索引值為cm的元素return (this->*Menu[cm])(); // Menu[cm]指向一個成員函數 }Screen::Action Screen::Menu[] = {&Screen::home,&Screen::forward,&Screen::back,&Screen::up,&Screen::down, };Screen myScreen; myScreen.move(Screen::HOME); // 調用myScreen.home myScreen.move(Screen::DOWN); // 調用myScreen.down

總結

以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 19 特殊工具与技术)成员函数指针的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。