c 程式設計中的和具體化,c 程式設計中的模板和具體化

2021-03-28 02:55:43 字數 3912 閱讀 7209

1樓:匿名使用者

for(int i=0;ib[i+1]?a:b[i+1];

這裡的 b[i+1] 下標越界了,例如 cout<當 i=3 時,b[i+1] 越界,所以迴圈退出條件應該為 i該改為 while(i

char * a=new char ; 這裡的分配是不需要的,因為 a 被初始化後,緊接著就會在迴圈中被賦其他值,也就是說原來初始化時的那個指標丟失了。而函式返回後的 delete p 刪除的是 maxn 的返回值,也就是 str 中最長的那個字串的地址,而這個地址是一個靜態字串,是不能釋放的。

所以 char * a=new char; 改為 char* a = null;

緊接著的 a=b[0]; 刪除

程式最後的 delete p; 也要刪除。

2樓:匿名使用者

邏輯錯誤

下面語句中

當i=4時

b[i+1] = b[5] 越界

while(i

i++;}

3樓:匿名使用者

template

t maxn(t b,int num)

template<> char* maxn( char* b,int num)

i++;}

在c++中模板的顯式具體化感覺可以用常規函式替代的,模板的顯式具體化有什麼特別與常規函式的嗎

4樓:淪落人

我覺得完全可以代替。

但是這樣做顯得很系統吧,就比如你有一個模板,只有int處理方式不同,那麼把int具體化,顯得很系統很規整。當然直接寫一個普通的int函式來遮蔽模板也是可以的,只是看上去就沒那麼整齊,可讀性降低了。

5樓:如果

模板template的作用就是過載和**複用,就是為了簡化你書寫的**。顯示具體化就是使用模板的一種方法,把型別,引數選定了;當然還有顯示例項化和隱式例項化...

c++模板類成員函式部分具體化 20

6樓:匿名使用者

給你一個問題,名稱之名稱有何奧妙?

模板名稱是什麼樣子的呢。

對於templateclass knap,它的某個具體使用應該是knap,而不是你以為的knap,如果typew預設為int不會產生什麼負面的影響,你可以templateclass knap(應該可以這樣,沒嘗試了);如果必須針對性寫一個不同版本的knap,你應該寫成:

templateclass knap;

這個模板是2個型別引數,並不是一個型別引數。

7樓:匿名使用者

template

class knap // 我就看出這裡少個分號

函式模板的具體化有什麼意義嗎??

8樓:平填真杯具平男

比如,你定義了一個函式模板

template

void func(const t& t)但是,當t是整數的時候你不想dosomething,而是想killsomeone,那就需要具體化了。

具體化有2種形式,一種是顯式具體化

即定義一個特殊型別的實現

template<>

void func(const int& t)這樣,除了int型以外,其他型別仍然按照dosomething來執行另一種方式是寫一個函式來遮蔽模板

比如,定義如下

void func(const int& t)這樣,在編譯連結時這個函式就遮蔽掉了模板,自動採用定義的函式。

以上就是函式模板具體化的作用和方法,如有不明白,可繼續追問

9樓:匿名使用者

就是確定了引數型別,用該型別替換函式模板裡的模板引數,生成能夠處理該型別的函式**,即模板函式。

總之一句話,就是將模板具體成某一型別引數的具體函式

關於c++模版具體化

10樓:

幫你寫好了,給點分數吧。linux下編譯的命令:

gcc -g -o max max.cpp -lstdc++

#include

#include

using namespace std;

//模板函式

template

ty maxn(ty array, const size_t size)

}return max;

}//模板特化函式

const char* maxn(const char* array, const size_t size)

}return mstr;

}int main( void )

; //6個元素的int陣列

double x2 = ;//4個元素的double陣列

const char* x3 = ;//5個元素的字串指標陣列

//不同的陣列呼叫maxn函式

int m1 = maxn(x1, sizeof(x1)/sizeof(x1[0]));

double m2 = maxn(x2, sizeof(x1)/sizeof(x2[0]));

const char* m3 = maxn(x3, sizeof(x3)/sizeof(char*));

//輸出結果

cout << "maxn( x1 ) = "<< m1 << endl;

cout << "maxn( x2 ) = "<< m2 << endl;

cout << "maxn( x3 ) = "<< m3 << endl;

return 0;}

c++函式模版顯示具體化問題 20

11樓:匿名使用者

typedef char* t;

const t x;

顯然這個宣告表示 x 的值不可以修改。換言之 x 的型別是 char * const 而不是 const char * ,如果 x 的型別是 const char * 的話 x 的值就可以更改了(*x 能不能修改?那關我什麼事)

這個例子就說明如果 t 表示 char* 那麼 const t 肯定就表示 char * const,否則c++就含有自相矛盾的規則了。也許寫成 t const 更好一點

既然引數不是 const char*,返回也就不應該是 const char*

如果 t 表示 const char * 的話,返回就是 const char*。下面的特化是合法的:

template <>const char * search_max(const char * const a , int n);

c++中函式模板顯示具體化問題大家快來看看啊~(跪求答案)

12樓:匿名使用者

#include

#include

using namespace std;

template

void maxn(t ar,int n);

templatevoid maxn(t * ar,int n);//我這個顯示具體化錯在**啊?模板型參類表不能為空;

int main()

; double tr[4]=;

string ch[5]= //型別不對;

; maxn(aa,6);

maxn(tr,5);

maxn(ch,5);

return 0;

} template

void maxn(t ar,int n);在這裡模板形參列表中的類名無關緊要,

如templatereturn_type name();

與templatereturn_type name();

是一樣的。

好好與你的程式對照一下!!!

物件導向的程式設計和C語言的結構化程式設計有什麼不同

為什麼叫c,為什麼叫c c是高階語言的一種,c 是對c的補充以及完善。c可以說是程序導向的語言,c 就可以說是面嚮物件語言,對c的完善與擴充。具體來說c 類是對c結構體的擴充,應為c 結構體 struct 和類 class 幾乎完全差不多,只是預設的訪問許可權不同,以及其他細微的差別!所以說把c學好...

求助網路c語言程式設計,求助,C語言程式設計的程式設計題?

還沒學到這麼深奧的東西。期待高手回答。這麼像我以前公司的一個專案 求助,c語言程式設計的程式設計題?include 判斷a是否為素數 int isprime int a else printf no n 執行結果 這類的題目 非常多請看 int isprime int a return 1 int ...

關於C,100分 相送。c中socket程式設計中,怎麼獲取接受到得資料長度

這個.一般都是建立一個緩衝區 byte buffer new byte 1024 然後通過read迴圈去填充緩衝區的.直到read到buffer中的為null了.最後你可以通過總的接受到的資料得到長度.不要妄想在接收完之前能得到資料長度.不現實的.伺服器端向客戶端傳送檔案之前,可以先向客戶端傳送一個...