C++類(lèi)中如何使用定義的類(lèi)型別名
類(lèi)中使用定義的類(lèi)型別名
1 typedef定義類(lèi)型別名
1.1 使用方法
在C++中,typedef關(guān)鍵字用來(lái)定義類(lèi)型的別名。
typedef int MYINT;
此時(shí),MYINT是int的別名,可以將MYINT作為數(shù)據(jù)類(lèi)型來(lái)定義其他變量。
MYINT myint;
其中,myint的類(lèi)型是MYINT 。
1.2 注意事項(xiàng)
不能使用typedef對(duì)類(lèi)型別名MYINT進(jìn)行重復(fù)定義。
typedef int MYINT; typedef double MYINT;
此時(shí),編譯器報(bào)錯(cuò),報(bào)錯(cuò)信息為“ error C2371: “MYINT”: 重定義;不同的基類(lèi)型”。
2 在類(lèi)中使用typedef定義的類(lèi)型別名
2.1 使用方法
在類(lèi)中也可以使用“1 typedef定義類(lèi)型別名”中定義的int的類(lèi)型別名MYINT。
class MyClass {
? MYINT i;
};此時(shí),自定義類(lèi)MyClass的成員變量i的類(lèi)型是int。
2.2 注意事項(xiàng)
在類(lèi)中可以對(duì)類(lèi)型別名MYINT進(jìn)行重復(fù)定義。
typedef int MYINT;
class MyClass {
? MYINT i;
? typedef double MYINT;
? MYINT j;
};此時(shí),自定義類(lèi)MyClass的成員變量i的類(lèi)型是int,而成員變量j的類(lèi)型是double。
關(guān)于類(lèi)型別名的總結(jié)
數(shù)組(本內(nèi)容摘錄自《C++ Primer 第五版》P205)
typedef int arrt[10]; ?//arrt是一個(gè)類(lèi)型別名, ?? ??? ??? ??? ??? ? ? //它表示的類(lèi)型是含有10個(gè)整數(shù)的數(shù)組 using arrt=int[10];?? ? ? //arrt的等價(jià)聲明 arrt* func(int i);?? ? ? //func返回一個(gè)指向含有10個(gè)整數(shù)的數(shù)組的指針
函數(shù)指針形參(本內(nèi)容摘錄自《C++ Primer 第五版》P222)
/* *顯式地將形參定義成指向函數(shù)的指針 */ void useBigger(const string &s1, const string &s2, ?? ??? ??? ??? ?bool (*pf)(const string &,const string &)); bool lengthCompare(const string &, const string &);
正如useBigger的聲明語(yǔ)句所示,直接使用函數(shù)指針類(lèi)型作形參顯得冗長(zhǎng)而煩瑣。類(lèi)型別名和decltype能讓我們簡(jiǎn)化使用了函數(shù)指針的代碼:
//Func和Func2是函數(shù)類(lèi)型 typedef bool Func(const string &, const string &); typedef decltype(lengthCompare) Func2;?? ??? ??? ?//等價(jià)的類(lèi)型 //FuncP和FuncP2是指向函數(shù)的指針 typedef bool(*Funcp)(const string &, const string &); typedef decltype(lengthCompare) *FuncP2;?? ??? ?//等價(jià)的類(lèi)型
我們使用typedef定義自己的類(lèi)型。Func和Func2是函數(shù)類(lèi)型,而FuncP和FuncP2是指針類(lèi)型。需要注意的是,decltype返回函數(shù)類(lèi)型,此時(shí)不會(huì)將函數(shù)類(lèi)型自動(dòng)轉(zhuǎn)換成指針類(lèi)型。因?yàn)閐ecltype的結(jié)果是函數(shù)類(lèi)型,所以只有在結(jié)果前面加上*才能得到指針??梢允褂萌缦碌男问街匦侣暶鱱seBigger:
//useBigger的等價(jià)聲明,其中使用了類(lèi)型別名 void useBigger(const string &, const string &, Func); void useBigger(const string &, const string &, FuncP2);
這兩個(gè)聲明語(yǔ)句聲明的是同一個(gè)函數(shù),在第一條語(yǔ)句中,編譯器自動(dòng)地將Func表示的函數(shù)類(lèi)型轉(zhuǎn)換成指針。
返回指向函數(shù)的指針
和數(shù)組類(lèi)似,雖然不能返回一個(gè)函數(shù),但是能返回指向函數(shù)類(lèi)型的指針。然而,我們必須把返回類(lèi)型寫(xiě)成指針形式,編譯器不會(huì)將函數(shù)返回類(lèi)型當(dāng)成對(duì)應(yīng)的指針類(lèi)型處理。與往常一樣,要想聲明一個(gè)返回函數(shù)指針的函數(shù),最簡(jiǎn)單的辦法是使用類(lèi)型別名:
using F = int(int*, int);?? ??? ?//F是返回類(lèi)型,不是指針 using PF = int(*)(int*, int);?? ?//PF是指針類(lèi)型
其中我們使用類(lèi)型別名將F定義成函數(shù)類(lèi)型,將PF定義成指向函數(shù)類(lèi)型的指針。必須時(shí)刻注意的是,和函數(shù)類(lèi)型的形參不一樣,返回類(lèi)型不會(huì)自動(dòng)地轉(zhuǎn)換成指針。我們必須顯式地將返回類(lèi)型指定為指針:
PF f1(int);?? ??? ?//正確:PF是指向函數(shù)的指針,f1返回指向函數(shù)的指針 F f1(int);?? ??? ?//錯(cuò)誤:F是函數(shù)類(lèi)型,f1不能返回一個(gè)函數(shù) F *f1(int);?? ??? ?//正確:顯式地指定返回類(lèi)型是指向函數(shù)的指針
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++實(shí)現(xiàn)strcpy函數(shù)實(shí)例
這篇文章主要介紹了C++實(shí)現(xiàn)strcpy函數(shù)實(shí)例,步驟講解的很詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的朋友跟隨小編一起來(lái)研究吧2020-12-12
詳細(xì)解讀C++編程中的匿名類(lèi)類(lèi)型和位域
這篇文章主要介紹了C++編程中的匿名類(lèi)類(lèi)型和位域,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01
C++實(shí)現(xiàn)二叉樹(shù)非遞歸遍歷方法實(shí)例總結(jié)
這篇文章主要介紹了C++實(shí)現(xiàn)二叉樹(shù)非遞歸遍歷方法實(shí)例總結(jié),是算法設(shè)計(jì)中比較經(jīng)典的一個(gè)遍歷算法,需要的朋友可以參考下2014-08-08
C語(yǔ)言實(shí)現(xiàn)單鏈表的快速排序算法
大家好,本篇文章主要講的是C語(yǔ)言實(shí)現(xiàn)單鏈表的快速排序算法,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01
C++實(shí)現(xiàn)教工考勤信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)教工考勤信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05

