c類和函式的問題,c類别範本和函式模板的問題

2021-05-22 00:27:11 字數 4641 閱讀 2131

1樓:匿名使用者

template

class mytmpclass

;template

mytmpclass::mytmpclass()template

void mytmpclass::set_information()template

void mytmpclass::display()int main()

{mytmpclassa;

a.set_information();

a.display();

cout<

你這樣試試。

2樓:★邂逅緣

template

type1 retun(identity&a);

還不支援du返回型別推

zhi導。

template

void identity::display()所有類dao外函式專實現identity後面需屬要跟上函式列表

c++中函式模板和模板函式的區別

3樓:匿名使用者

2.1 函式模板的定義

不管它們的性質如何,所有的函式模板都具有同樣的基本格式:

template《引數說明》

函式頭函式體

例如,下面是一個2引數的模板的宣告:

template

t max(t param1 ,t param2)2.根據上面已定義的模板,編譯器將可生成下面的模板函式(都是對的,函式模板的目的就是函式過載):

char * max(char * a, char * b) //模板函式1

int max(int a, int b) //模板函式2double max(double a, double b) //模板函式2

等等。。。。。。。。。。。。。

4樓:116貝貝愛

模板函式可以進行隱式的資料型別轉換,中函式模板不會進行自動型別轉換。

一、函式模版和同名普通函式在同一個作用域中,會優先呼叫哪個函式,具體如下:

1.函式模型在進行呼叫的時候會進行嚴格的型別匹配,而普通函式在呼叫的時候,會進行函式引數型別轉換(前提是自動型別轉換)。

2.呼叫函式模版,本質是型別引數化,將要嚴格的按照型別進行匹配,不會進行自動型別轉換

3.呼叫普通函式,可以進行隱式的資料型別轉換(前提是可以進行自動型別轉換),這是普通函式和模版函式的本質區別。

二、函式模版可以像普通函式被過載

1.c++編譯器優先考慮普通函式:這是因為普通函式已經存在了,而模版函式還需要進一步的判斷,如果函式模版產生一個更好的匹配,那麼優先選擇函式模版。

2.可以通過空模版實參列表的語法限制編譯器只呼叫模版函式(也就是在引數名之後加上<>,隱含了自動型別推斷!),c++編譯器是如何支援模版機制的。

5樓:匿名使用者

類 例項化生成 例項(物件)

函式模板 例項化生成 模板函式

6樓:匿名使用者

函式模板提供了一類函式的抽象,它提供了任意型別為引數及返回值。函式模板經例項化後生成的具體函式成為模板函式。函式模板代表了一類函式,模板函式表示某以具體函式。

c++中函式模板和模板函式的區別

7樓:116貝貝愛

模板函式可以進行隱式的資料型別轉換,中函式模板不會進行自動型別轉換。

一、函內數模版和同名普通函容數在同一個作用域中,會優先呼叫哪個函式,具體如下:

1.函式模型在進行呼叫的時候會進行嚴格的型別匹配,而普通函式在呼叫的時候,會進行函式引數型別轉換(前提是自動型別轉換)。

2.呼叫函式模版,本質是型別引數化,將要嚴格的按照型別進行匹配,不會進行自動型別轉換

3.呼叫普通函式,可以進行隱式的資料型別轉換(前提是可以進行自動型別轉換),這是普通函式和模版函式的本質區別。

二、函式模版可以像普通函式被過載

1.c++編譯器優先考慮普通函式:這是因為普通函式已經存在了,而模版函式還需要進一步的判斷,如果函式模版產生一個更好的匹配,那麼優先選擇函式模版。

2.可以通過空模版實參列表的語法限制編譯器只呼叫模版函式(也就是在引數名之後加上<>,隱含了自動型別推斷!),c++編譯器是如何支援模版機制的。

8樓:棒棒的

如果一個程式來中需要使用多自

種資料型別的比較,則下面思路合理的是()

定義多個不同

函式名的比較函式,完成不同型別的比較

b定義多個同名過載函式完成不同型別的比較

c定義一個比較函式模板完成對不同型別資料的比較d以上思路均不合理

c++,為何模板類才能使用預設模板引數,而模板函式卻不能?求教。

9樓:匿名使用者

這是因為函式是根據呼叫時的引數型別反推模板引數型別。而模板類别範本引數型別是你申明物件時給出的。好拗口啊!還是拿你的例子來舉例來說明好了:

我們定義一個模板函式:

template func(t1 p1, t2 p2);

然後在某一個地方呼叫:

int x; short y;

func(x, y);//編譯器編譯這裡的**時會根據實際引數x, y的型別得出t1是int,t2是short。如果你在函式板中指定typename t2 = int也沒啥用,而且甚至和推匯出的short矛盾。

而模板類就不一樣:

template class **ame;//類似函式的建構函式...};

**ameobj(x, y);//這裡t2已由給出了,它規定t1必須是int型別,t2必須是short型別,而不是由x, y來反推t1, t2。如果x, y型別不能隱式轉換成(int)x, (short)y則與申明不符會出編譯錯誤。

10樓:匿名使用者

你給fun函式傳個int,那個int多餘的啊,因為沒有typename匹配它

c++的函式過載和類别範本有什麼區別?

11樓:無語

應該沒有實質性的區別吧,底層的實現原理應該是一致的,不過類過載之後專類中的成員函式和屬資料成員都可以用類中的模版了!

類過載:

templet(此處可以有多個型別包括類型別,templet(class t,link h))

class array;

t arr[size];

public:

t &operater (int i)

for(int i=0;i<20;i++)cout<

system("pause");

return 0;}}

12樓:步行者

過載:一般指的是函式過載,函式過載只是對某個函式實現多種不同的寫法如版void func(), void func(int) , void func(char);

類别範本:把整

權個類寫成一個模板,而類裡面又可以有很多成員函式,成員變數。這是過載所做不到的。

template

class testclass

;t geta(){};

t getb(){};

t seta(){};

t setb(){};}

13樓:匿名使用者

只能說有些相似bai之處,函式過載du是根據形zhi參的型別決定dao用哪個函式;類模版板具體

化中,無論顯式權具體化、顯式例項化都跟型別有關。另外函式過載需要宣告定義多個函式,類别範本具體化中,也要根據需要定義多個類别範本。還有,函式過載時,函式名都相同;類别範本具體化時,也都是同名的類别範本。

14樓:xd小關

應該是和函式模板的區別,你可以認為函式模板是將函式引數變化的部分抽象出來,其他沒有區別

c++為什麼要有模板?模板有什麼用?使用模板和直接使用類或函式有什麼區別?

15樓:匿名使用者

使用模板是為了實現泛型,可以減輕程式設計的工作量,增強函式的重用性。

例如將兩個變數交換的函式swap;

如果不是用模板的話我們需要針對不同的型別寫很多個功能相同的函式,例如int、char等等

而使用模板的話則只用使用一個函式就足夠了

template

void swap(t a, t b);

呼叫的時候可以顯示的說明型別例如:swap(3, 5)也可以使用簡單的用法,和使用普通函式是一樣的:swap(3, 5)更具體的你可以自己查閱相關資料

16樓:匿名使用者

方便根據情況過載啊!

template

myswap(t& a,t& b)

然後就可以隨便swap各種物件了,否則,一個個過載?

你懂得。。。

不知lz是否是此意。

17樓:匿名使用者

函式的過載,虛擬函式等等都叫做多型。 過載和模板性質差不多,基本就是一個函式,可以用多種引數,比如 void func(int i); void func(long l); 這樣就

18樓:暗泉

使用模板可以使用不同的資料型別

C 類與函式的定義問題

一 thitinfo int nodeid,double hittime 值傳遞 引用傳遞 常量引用傳遞 預設常量引用傳遞 二 加const的意思是不改變形參的值,呼叫時,實參可以是const,也可以是非const...

c語言,函式,函式,c語言,函式,函式模板

那是c 自帶的模板庫,c的很少,而且 長難記且功能少,基本可以忽略。要是用c的話,函式基本要自己寫的 在c語言中如何實現函式模板 各種用 c 語言實現的模板可能在使用形式上有所不同。現以一個求和函式 sum 為例,用 c template 可寫如下 template r sum const t ar...

類的成員函式必須是函式,類别範本的成員函式必須是函式模板

不一定的 隨便找個例子就知道了 這種說法是 錯!的 c 類别範本的成員函式在外部實現時,為什麼每個 函式前面都要加template 那是給類做模板宣告 如 template class a template void a b 如果沒有template的話,就無法說明專a這個類是模板類了屬 c 中如何...