日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 工業(yè)控制 > 電子設(shè)計(jì)自動化
[導(dǎo)讀](1)用戶定義的轉(zhuǎn)換的必要性:我們希望能夠在SmallInt對象和其他SmallInt對象或者內(nèi)置算術(shù)類型的對象之間進(jìn)行加減操作,我們要通過提供6個(gè)SmallInt操作符函數(shù)來實(shí)現(xiàn)對這些操作的支持: class SmallInt ...{ friend

(1)用戶定義的轉(zhuǎn)換的必要性:我們希望能夠在SmallInt對象和其他SmallInt對象或者內(nèi)置算術(shù)類型的對象之間進(jìn)行加減操作,我們要通過提供6個(gè)SmallInt操作符函數(shù)來實(shí)現(xiàn)對這些操作的支持:

class SmallInt ...{

friend operator+( const SmallInt &, int );

friend operator-( const SmallInt &, int );

friend operator-( int, const SmallInt & );

friend operator+( int, const SmallInt & );

public:

SmallInt( int ival ) : value( ival ) ...{ }

operator+( const SmallInt & );

operator- ( const SmallInt & );

// ...

private:

int value;

};

兩個(gè)成員操作符允許我們加減兩個(gè)SmallInt對象。友元全局操作符允許我們在SmallInt對象和內(nèi)置算術(shù)類型的對象之間進(jìn)行加減操作。之所以只需要6個(gè)操作符,是因?yàn)槿魏蝺?nèi)置算術(shù)類型都可以被轉(zhuǎn)換為與int型參數(shù)相匹配。

如果我們還想支持按位操作符、邏輯操作符、關(guān)系操作符和復(fù)合賦值操作符,則要求的操作符的數(shù)目就變得非??膳铝恕N覀兏M?,不是提供所有的重載操作符,而是一種將SmallInt類對象自動轉(zhuǎn)換成int 型對象的方式。

C++提供了一種機(jī)制,通過它,每個(gè)類都可以定義一組“可被應(yīng)用在該類型對象上的轉(zhuǎn)換”。對于SmallInt,我們定義了一個(gè)從SmallInt對象到int型的轉(zhuǎn)換。

class SmallInt ...{

public:

SmallInt( int ival ) : value( ival ) ...{ }

// 轉(zhuǎn)換操作符

// SmallInt ==> int

operator int() ...{ return value; }

// 沒有提供重載操作符

private:

int value;

};

(2)需要注意的地方:

(a)轉(zhuǎn)換函數(shù)必須是成員函數(shù),它的聲明不能指定返回類型和參數(shù)表。

operator int( SmallInt & ); // 錯(cuò)誤: 不是成員

class SmallInt ...{

public:

int operator int(); // 錯(cuò)誤: 返回類型

operator int( int = 0 ); // 錯(cuò)誤參數(shù)表

// ...

};

(b)顯式的類型轉(zhuǎn)換會導(dǎo)致調(diào)用轉(zhuǎn)換函數(shù)。(須注意在必要的時(shí)候?qū)⑥D(zhuǎn)換類型設(shè)置為const,只允許對被轉(zhuǎn)換的類對象進(jìn)行只讀訪問)

#include "Token.h"

Token tok( "function", 78 );

// 函數(shù)型的表示法: 調(diào)用 Token::operator SmallInt()

SmallInt tokVal = SmallInt( tok );

// static_cast: 調(diào)用 Token::operator tName()

char *tokName = static_cast< char * >( tok );

(c)如果轉(zhuǎn)換的目標(biāo)(本例中的double)與轉(zhuǎn)換函數(shù)的類型(本例中的int類型)不完全匹配,但目標(biāo)類型可以通過標(biāo)準(zhǔn)轉(zhuǎn)換序列到達(dá),則仍可調(diào)用轉(zhuǎn)換函數(shù)。

extern void calc( double );

Token tok( "constant", 44 );

// 調(diào)用 tok.operator int() 嗎? 是的

// int --> double 通過標(biāo)準(zhǔn)轉(zhuǎn)換

calc( tok );

(d)使用構(gòu)造函數(shù)作為轉(zhuǎn)換函數(shù)。

extern void func( Number );

SmallInt si( 87 );

{

// 調(diào)用 Number( const SmallInt & )

func( si );

}

當(dāng)然,可通過在類的構(gòu)造函數(shù)前設(shè)置explicit,以禁止將其用來執(zhí)行隱式轉(zhuǎn)換。



來源:神秘0次

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉