麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

函數(shù)調用運算符與重載、類型轉換

2019-11-14 08:59:34
字體:
來源:轉載
供稿:網(wǎng)友

函數(shù)調用運算符Operator() 函數(shù)運算符必須是成員函數(shù)。一個類可以定義多個不同版本的調用運算符,相互之間應該在參數(shù)數(shù)量或類型上有所區(qū)別。如果類定義了調用運算符,則該類的對象稱作函數(shù)對象。 函數(shù)對象類除了operator之外還可以包含其他成員。這些成員通常用于定制調用運算符中的操作。

#include <iostream>#include <string>class A{public: int operator()(bool a,int b,int c) const { if(a) return b; else return c; }};class GetInput{public: GetInput(std::istream &i=std::cin):is(i){} std::string operator()()const { std::string str; std::getline(is,str); return is?str:std::string(); }PRivate: std::istream &is;};int main(){ A a; int ret=a(0,7,8); std::cout<<ret<<std::endl; GetInput gi; std::cout<<gi()<<std::endl; return 0;}

lambda表達式相當于一個類含有函數(shù)調用符的對象。

stable_sort(Words.begin(),words.end(),[](const string &a,const string &b){return a.size()<b.size()});等價于class shorterstring{public: bool operator()(const string &a,const string &b) const { return a.size()<b.size() }}

標準庫定義了一組表示算術運算符、關系運算符和邏輯運算符的類。這些類被定義成模板的形式。

這里寫圖片描述

#include <iostream>#include <functional>int main(){ std::plus<int> intadd; int sum=intadd(10,20); std::cout<<sum; return 0;}

C++語言有幾種可調用的對象:函數(shù),函數(shù)指針,lambda表達式,bind創(chuàng)建的對象,重載的函數(shù)運算符的類。不同類型可能有相同的調用形式。在制作函數(shù)表的時候,我們可以利用function模板來實現(xiàn)不同類型而具有相同調用形式形成函數(shù)表。

#include <functional>#include <iostream>#include <map>#include <string>int add(int i,int j){return i+j;}auto mod=[](int i,int j){return i%j;}; struct Div{ int operator ()(int i, int j) const { return i / j; } };auto binops=std::map<std::string,std::function<int(int,int)>>{ {"+",add},//加法,函數(shù)指針 {"%",mod},//求余,命名的lambda對象 {"/",Div()},//除法,函數(shù)對象類 {"-" ,std::minus<int>()},//減法,標準庫函數(shù)對象 {"*",[](int i,int j){return i*j;}}//乘法,未命名的lambda對象 };int main(){ while ( std::cout << "Pls enter as: num operator num :/n", true ) { int lhs, rhs; std::string op; std::cin >> lhs >> op >> rhs; std::cout << binops[op](lhs, rhs) << std::endl; } return 0;}

類型轉換運算符是類的一種特殊的成員函數(shù),它負責將一個類類型的值轉換成其他類型。一個類型轉換函數(shù)必須是類的成員函數(shù),它不能聲明返回類型,形參列表也必須為空。類轉換類型函數(shù)通常是const.

operator type() const;

類型轉換運算符可能產生意外的結果,C++11新標準引入了顯示的類型轉換運算符

class SmallInt{ explicit operator int() const{return val;}}SmallInt si=3;//正確si+3;//錯誤,需要隱式類型轉換,但類運算符是顯式的static_cast<int>(si)+3;//正確:顯式地請求類型轉換

向bool的類型轉換通常用在條件部分,因此operator bool一般定義成explicit.


如果類中包含一個或多個類型,則必須確保在類類型和目標類型之間只存在唯一一種轉換方式。 (1)實參匹配和相同的類型轉換

struct B;struct A{ A()=default; A(const B&);};struct B{ operator A() const; };A f(const A&);B b;A a=f(b);//二義性錯誤:f(B::operator A()) ?f(A::A(const B&))A a1=f(b.operator A());//正確:使用B的類型轉換運算符A a2=f(A(b));//正確:使用A的構造函數(shù)

(2)二義性與轉換目標為內置類型的多重類型轉換

這里寫圖片描述


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人在线观看免费 | 欧美综合在线观看视频 | 欧美日韩精品一区二区三区蜜桃 | 精品亚洲视频在线 | 日本视频免费观看 | 国产精品一区二区三区在线 | 国产亚洲精品久久午夜玫瑰园 | 91久久久久 | 国产一级淫片免费看 | 成年免费视频黄网站在线观看 | 一级电影免费在线观看 | 在线观看中文字幕av | 国产乱淫a∨片免费观看 | 一区二区三区在线视频观看58 | 欧美一级黄色影院 | 欧美在线观看视频一区二区 | 精品国产一区三区| 超碰人人做人人爱 | 午夜精品在线视频 | 一级黄片毛片免费看 | 国产精品午夜未成人免费观看 | 91精品国产一区二区三区四区在线 | 斗罗破苍穹在线观看免费完整观看 | 黄网站进入 | 搜一级毛片| 一级免费黄色 | 91麻豆精品国产91久久久点播时间 | 在线a毛片免费视频观看 | 欧美亚洲国产一区二区三区 | 亚洲一区中文字幕 | 青热久思思 | 精品国产乱码久久久久久久 | 91av在线免费视频 | 国产午夜亚洲精品 | 欧美人与性禽动交精品 | 成人爽a毛片免费啪啪红桃视频 | 欧美精品一区二区久久 | 一级电影免费在线观看 | 国产成年人视频网站 | 中文字幕欧美视频 | 一级毛片电影院 |