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

2021-05-15 22:18:56 字數 3175 閱讀 7339

1樓:天下無雙由我

不一定的 ,隨便找個例子就知道了

2樓:匿名使用者

這種說法是 錯!的

c++類别範本的成員函式在外部實現時,為什麼每個 函式前面都要加template ???

3樓:destroy流亡

那是給類做模板宣告

如:template

class a

;template

void a::b(){}

如果沒有template的話,就無法說明專a這個類是模板類了屬

c++中如何在類别範本外定義函式

4樓:匿名使用者

目前的大多數compiler還不能解析在類的宣告之外定義的member template。

c++ standard 對於在類定義之外定義member template 的標準寫法如下(不過在vc++6.0下無法編譯通過):

template template

void a::test(t1 p)

5樓:匿名使用者

#include

using namespace std;

template

class compare

;// 在類别範本外面定義其成員函式:

template

compare::compare(numtype a,numtype b)

template

numtype compare::max()template

numtype compare::min()

6樓:匿名使用者

是想定義在原始檔嗎?

1.這是不允許的,因為模板類的成員函式的定義,是一種不完整的定義.2.由於編譯器不知道模板引數的具體型別,無法為其成員函式生成**.3.

編譯器在成員函式的呼叫處,才最終知道如何生成**.總之,模板類的成員函式的定義不能像普通類的成員函式一樣,定義在源**中,而只能定義在標頭檔案中.

如果想定義在標頭檔案中的模板類以外,倒是可以做到,如下:

template

compare::compare(numtype a,numtype b)

template

numtype compare::max()template

numtype compare::min()

7樓:匿名使用者

同樣的定義一個模板函式。

8樓:落雨轟隆

類别範本的成員函式的實現寫在標頭檔案(.h)的類內部或類外部都行,

但是,類别範本成員函式在另一個檔案(.cpp)裡實現它報錯

error lnk2019: 無法解析的外部符號 "public: void __thiscall compare::

test(void)" (?test@?$compare@m@@qaexxz),該符號在函式 _main 中被引用

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

9樓:116貝貝愛

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

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

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

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

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

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

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

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

10樓:棒棒的

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

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

定義多個不同

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

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

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

c++怎麼類外定義模板類的成員函式? 模板引數怎麼呼叫?

11樓:匿名使用者

#ifndef stack_h

#define stack_h

#include

#include

/*** 棧

*/template

class stack

;template

stack::stack() : top(-1){}template

void stack::push(const itemtype& item)

top++;

array[top] = item;

}template

itemtype stack::pop()itemtype temp = array[top];

top--;

return temp;

}template

itemtype stack::peek() constreturn array[top];

}template

bool stack::isempty() consttemplate

bool stack::isfull() consttemplate

void stack::clearstack()}#endif   //stack_h

呼叫的方法,如下:

#include

#include"stack.h"

int main()

c++這樣宣告帶有模板的成員函式

12樓:匿名使用者

沒說清楚。depthfirstvisit是什麼?哪些函式是虛擬函式?函式指標要存起來嗎?如果只是宣告模板成員函式,很簡單

class test;

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

template class mytmpclass template mytmpclass mytmpclass template void mytmpclass set information template void mytmpclass display int main mytmpclass...

以下哪個基類中的成員函式表示純虛擬函式

virtual void vf int 和void vf int 0基類中的成員函式表示純虛擬函式。純虛擬函式是一種特殊的虛擬函式,在許多情況下,回在基類中不能對虛答函式給出有意義的實現,而把它宣告為純虛擬函式,它的實現留給該基類的派生類去做。這就是純虛擬函式的作用.在許多情況下,在基類中不能對虛擬...

c的類成員函式如何訪問全域性變數

假如有個全域性變數int a,存放於myfile.h檔案中,則在類中用,需要新增 include myfile.h extern int a 即可 一般情況下,假如沒有區域性宣告變數,就會呼叫全域性變數,如果宣告瞭區域性變數,則,區域性變數會遮蔽全域性變數。除非你指定呼叫全域性變數,加上作用域操作符...