關於c型別請教,關於C 模板型別,請教

時間 2022-02-04 01:35:13

1樓:匿名使用者

1、先不說引數匹配,你模板裡的for寫錯了,逗號改成分號。

2、b1是一個int[5]型別的指標,所以模板函式的返回型別也是個指標,指標無法給double型別的b3賦值,也沒法轉換,所以不匹配。

更改:模板引數的引用換成指標。

2樓:

模板就是一個印子,例項化的時候就是套資料型別的。比如你的main函式裡面b3=max5(b1)。b1是int型陣列,所以,套用模板定義的模板函式,就是這個意思。

同理,你也可以定義其他型別的陣列或指標進行函式的套用。

模板函式就是將相同功能,不同資料型別的函式寫成是一個函式,函式定義時是用抽象資料型別。

模板具有模板函式和模板類。

不知道你是不是這點不明白,希望能幫到你。

3樓:飛絮逐塵

那就先用int 然後再把所有的int 換成泛型 t ,意思就是t可以指任意某一種統一的型別 比如double,float,short ,int等等……

4樓:匿名使用者

在max5函式中你想做什麼?a[i]>b,你要把一個int變數與int*變數作比較?

c++模板概念是什麼?詳細點

5樓:都菀

模板可以認為是類的類,我們知道一個類可以例項化為一個物件,那麼類其實可以認為是一個模板類的一份例項,我們可以讓一個模板類產生多份類例項,只需要簡單的指定不同的模板引數,這樣可以進一步提高**的抽象性,不知道你瞭解lua或者as3這類指令碼程式語言麼,他們都提供函式型別,as3提供類型別,這些語言認為一份函式**其實就是某個函式物件,一份類**就是某個模板類的一份例項;不知你理解了木有

6樓:匿名使用者

模板這東西,相當於容器,就vector模板來說吧,我們可以將它想象為排成一列的桶,桶裡面的裝的東西就是你需要放的元素,也許是int型別、double型別,自定義的結構、聯合、類等元素,也可能還是另外的模板(就是說桶裡面又有一個小的桶)。

至於模板函式,就容易了,不指定任何型別,因為無法確定需要的型別,所以就相當於空在那裡,等使用者自己來確定,到底該放什麼東西在上面。

7樓:匿名使用者

有以下這樣3個求加法的函式:

int add(int x,int y)

double add(double x,double y)long add(long x,long y)它們擁有同一個函式名,相同的函式體,卻因為引數型別和返回值型別不一樣,所以是3個完全不同的函式。即使它們是二元加法的過載函式,但是不得不為每一函式編寫一組函式體完全相同的**。如果從這些函式中提煉出一個通用函式,而它又適用於多種不同型別的資料,這樣會使**的重用率大大提高。

那麼 c++的模板就可解決這樣的問題。模板可以實現型別的引數化(把型別定義為引數),從而實現了真正的**可重用性。c++中的模板可分為函式模板和類别範本,而把函式模板的具體化稱為模板函式,把類别範本的具體化成為模板類。

8樓:曦夕兮

我打個比方吧,假如說你學了c語言很久,對連結串列很熟練,然後別人想讓你寫一個簡單的學生管理系統,但是雖然爛熟於心,但是寫那麼多插入連結串列,刪除連結串列,查詢連結串列函式依然很麻煩,而且都是一樣的**,寫很多遍就煩了。

那麼能不能做一個模板類,把所有的通用**整合起來,我們只需要呼叫模板函式就可以不用寫一些基礎**了。

就這樣,模板類誕生了,模板類整合了很對前人優秀的**,舉了例子,list模板

這是連結串列模板,我們以後寫插入連結串列,刪除連結串列,查詢連結串列函式,再也不用也麻煩的**從遍歷連結串列開始,直接list。insert(),list。srarch(),list。

delete()就可以實現功能了,所以,模板就是為了方便而產生的

c++ 模板類 請給寫一個最簡單的例項。

9樓:和藹的

template < class _t >class cstring

;上面**建立了一個字串模板類,用的時候像下面這樣子 :

cstring< char > ascii_string;

cstring< wchar_t > wild_string;

模板的作用在於建立一個型別無關,但是邏輯上一致的資料型別,比方說字串,現在字串有兩種,一種是符合 ascii 標準的單位元組字串,一種則是符合 unicode 標準的多位元組字串,但是兩種字串的抽象介面都一樣,都可以求字串長度,都可以獲取字串指標,都可以進行下標索引,都可以用於字串連線,但是特意建立兩個類來分別表示兩種字串,未免有點浪費,所以類别範本就出現了,我們只需要建立一個類别範本,就可以表示兩種型別的字串;

關於c++模板類用途

10樓:_鈊_煩_薏亂

實現c++的多型性。

模板類和模板函式的作用都很強大,stl模板庫中定義了很多模板,我們需要時可以呼叫它。

模板的作用:模板它提供的是一個框架,待你提供真正的引數後,它便有了一個例項。

11樓:匿名使用者

模板是範

來型程式設計的基礎,所謂範源型程式設計就是用獨立與任何特定型別的方式編寫**所以簡單地說,類是物件的抽象,而模板又是類的抽象,也就用模板能定義出具體類

再理解深刻點

在c++裡,常說的多型一般分為兩種:

一種是執行是的多型,也就是虛擬函式體現的多型另一種是編譯市的多型,也就是範型程式設計的多型,體現在引數的多型在作用上是為了提高程式設計效率,其實用其他技術也能達到同樣的效果

關於c++函式模板定義時候的返回型別問題

12樓:軒落_翼

你這裡的是錯的

t是在你呼叫的時候來確定的,給你個例子版

:#include

using namespace std;

template

t fun(int a, int b)

int main()

13樓:劉文正粉絲

在模板裡, 你可以抽來象源地把typename理解為一種資料型別(它應該是算成靜態的資料型別)

你在template中定義的是typename 1和2, 沒有t, 所以fun(t a , t b)就肯定是錯的, 因為你定的是1和2, 就沒有t的事.

這個和過載差不多, 只是說過載是對於不同引數進行不同的操作, 這個是對於不同的資料型別, 進行相同的操作, 但是這樣, 模板也是可以減少許多不必要的**書寫.

正確寫法是:

template

_1 fun (_1 a, _2 b)

14樓:匿名使用者

你在**看到的, 原樣抄過來, 別按自己理解寫一個.

template沒有這種寫法.

關於c++類别範本

c++模板類有什麼作用

15樓:匿名使用者

c++模板的作用就是你不確定該模板要用到什麼型別,可以是原有型別,也可以是自己定義的類等.通常把一個東西用於多處不同型別的地方,就需要建立該東西的模板.比如說你有一個模具(相當於模板),然後你需要藍色的,所以用該模具做出藍色的東西,接著你又需要紅色的,然後再用該模具做出紅色的東西.

可見模板是可複用的.通過不同的型別就給出該模板的例項化.希望我講的能讓你明白.

詳細的可自行參考相關書籍課本等.至於宣告方式用法注意點等都去看看書吧.

16樓:匿名使用者

編譯期間多型,編譯期間斷定,編譯期間檢查,編譯期間識別,。。。

反正一切都在編譯的時候做

什麼是c++模板?

17樓:匿名使用者

、模板是一種工具。使用它會給程式設計師編寫大規模的軟體帶來方便。因為使用模板可以使程式設計師建立具有通用型別的函式庫和類庫。

模板也是c++語言支援引數化多型性的工具。將一段程式所處理的物件型別引數化,就可以使這段程式能夠處理某個型別範圍內的各種型別的物件,這就是引數化多型性。被引數化的一段程式將會處理一定範圍內的若干種不同型別的物件,即對於一定範圍內的若干不同型別的物件的某種操作將對應著一個相同結構的實現。

而模板這種工具就是用來解決這個問題的。由於c++語言的程式結構主要是由函式和類構成的,因此,模板也具有兩種不同的形式:函式模板和類别範本。

4、函式模板與模板函式

函式模板是對一組函式的描述,它不是一個實實在在的函式,編譯系統並不產生任何執行**。

當編譯系統在程式中發現有與函式模板中相匹配的函式呼叫時,便生成一個過載函式,該過載函的函式體與函式模板的函式體相同。該過載函式稱為模板函式。

函式模板與模板函式的區別如下:

(1) 函式模板不是一個函式,而是一組函式的模板,在定義中使用了引數型別。

(2) 模板函式是一種實實在在的函式定義,它的函式體與某個模板函式的函式體相同。

編譯系統遇到模板函式呼叫時,將生成可執行**。函式模板是定義過載函式的一種工具。一個函式模板只為一種原型函式生成一個模板函式,不同原型的模板函式是過載的。

這樣就使得一個函式只需編碼一次就能用於某個範圍的不同型別的物件上。因此,可以說函式模板是提供一組過載函式的樣板。

18樓:匿名使用者

以前國家二級考試(c語言)都用的是c,從08年用c++了!比c難!本身c++就比c語言難!

19樓:匿名使用者

讓你寫的**支援多種資料型別如

template

void test(t temp)

你呼叫的時候用

test(10);

test('a');

test(1.3232);

test("dfsdf");

這些都可以正常。這就是模板

20樓:匿名使用者

在c++中有如下語句

int a;

char b;

long c;

float d;

像上面的 int, char, long, float 被稱為「型別」。

有時需要將「型別」也做為引數來處理,比如,要寫一個比較大小的函式 comp(x,y)

如果是兩個int型比較就返回一個int型別的值,如果是兩個float型比較就返加一個float型結果,當然可以用函式過載來實現,但利用函式模板就只要寫一個函式

template

t comp(t x,t y)

其中template就是宣告將t作為一個型別引數

和以下過載的函式比較一下

int comp(int x,int y)

float comp(float x,float y)

簡單的說, 模板 就是一個函式或類别範本可以解決不同型別的問題

21樓:匿名使用者

回去好好看書勝過在這裡問。

C中的元素型別(關於陣列)

可以這樣實現 object arr new object 2 將object看做一個二維陣列,因為它的元素是object型別,可以儲存陣列 arr 0 new float 10 第一個元素儲存一個float陣列,其他型別同理 arr 1 new int 5 float arr 0 0 1.0f 還原...

關於C語言變數儲存型別的問題

聽雨晨安 1開始已經定義了全域性變數i,而main函式中又有個i的宣告,有什麼作用呢?答 如果重複定義了i變數,那麼對於內層的塊,有效的是 main函式中的i 2.然後在new函式中傳入了i的值,全域性變數在這裡起作用?和1類似,全域性變數i的作用域為程式執行到程式結束,並且對於每個塊,都有效。大致...

c語言結構型別,C語言結構型別

這個是允許預設的,一般情況下是不能省略的。你給的 中在定義結構體型別時候同時定義了結構體變數lnode,這樣就用不到結構體類名。但是,如果你沒有在定義結構體時定義結構體變數,那麼你沒有結構體名,之後怎麼去定義結構體變數呢?typedef struct nodelnode node是一個結構體的名稱,...