在閱讀<<C++標準庫>>的時候,在for_each()章節遇到下面代碼,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include "algostuff.hpp" class MeanValue{ private : long num; long sum; public : MeanValue():num(0),sum(0){ } void operator() ( int elem){ num++; sum += elem; } operator double (){ return static_cast < double >(sum) / static_cast < double >(num); } }; int main() { std::vector< int > coll; INSERT_ELEMENTS(coll,1,8); double mv = for_each(coll.begin(),coll.end(),MeanValue()); //隱式類型轉換 MeanValue轉化為double std::cout<< "mean calue: " << mv <<std::endl; } |
對于類中的operator double(){},第一次見到這個特別的函數,其實他是"隱式類型轉換運算符",用于類型轉換用的.
在需要做數據類型轉換時,一般顯式的寫法是:
type1 i;
type2 d;
i = (type1)d; //顯式的寫類型轉,把d從type2類型轉為type1類型
這種寫法不能做到無縫轉換,也就是直接寫 i = d,而不需要顯式的寫(type1)來向編譯器表明類型轉換,要做到這點就需要“類型轉換操作符”,“類型轉換操作符”可以抽象的寫成如下形式:
operator type(){};
只要type是一個類型,包括基本數據類型,自己寫的類或者結構體都可以轉換。
隱式類型轉換運算符是一個特殊的成員函數:operator 關鍵字,其后跟一個類型符號。你不用定義函數的返回類型,因為返回類型就是這個函數的名字。
1.operator用于類型轉換函數:
類型轉換函數的特征:
1) 型轉換函數定義在源類中;
2) 須由 operator 修飾,函數名稱是目標類型名或目標類名;
3) 函數沒有參數,沒有返回值,但是有return 語句,在return語句中返回目標類型數據或調用目標類的構造函數。
類型轉換函數主要有兩類:
1) 對象向基本數據類型轉換:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include<iostream> #include<string> using namespace std; class D{ public : D( double d):d_(d) {} operator int () const { std::cout<< "(int)d called!" <<std::endl; return static_cast < int >(d_); } private : double d_; }; int add( int a, int b){ return a+b; } int main(){ D d1=1.1; D d2=2.2; std::cout<<add(d1,d2)<<std::endl; system ( "pause" ); return 0; } |
2)對象向不同類的對象的轉換:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#include<iostream> class X; class A { public : A( int num=0):dat(num) {} A( const X& rhs):dat(rhs) {} operator int () { return dat;} private : int dat; }; class X { public : X( int num=0):dat(num) {} operator int () { return dat;} operator A(){ A temp=dat; return temp; } private : int dat; }; int main() { X stuff=37; A more=0; int hold; hold=stuff; std::cout<<hold<<std::endl; more=stuff; std::cout<<more<<std::endl; return 0; } |
上面這個程序中X類通過“operator A()”類型轉換來實現將X類型對象轉換成A類型。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.cnblogs.com/Glucklichste/p/11490110.html