c語言中模板
A. c語言中的一個模板中「 ^!」代表什麼意思
! 「非」運算。 非真為假,非假為真。
----------
^ 「異或」運算, 按位運算符
參與運算的兩個值,如果兩個相應位相同,則結果為0,否則為1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0
------
A ^! B -- 先計算 (非B) ,再計算 A 異或 (非B)
B. 在C語言中類成員,函數重載,繼承,派生類,類模板怎麼定義。
C語言中沒有類的概念,C++中才有類,有類成員變數,成員函數,對象,以及重載,繼承,派生的概念;
函數的重載是指在同一個類中具有相同的函數名,但是可能函數的返回值類型,或者形參個數,或者形參類型不同;
派生是指基類跟子類的關系:例如class
A:public
B;類A共有繼承B;
呵呵,這些東西需要你慢慢看,注意重載
跟覆蓋的區別以及與虛函數之間的關系,等等
至於類模板,就是你定義一個類,而不指定數據類型,關鍵字template,等到後面的開發中你可以實際根據需要實例化為你想要的
類型,例如int
,char,struct
等等
C. 什麼是C++模板
、模板是一種工具。使用它會給程序員編寫大規模的軟體帶來方便。因為使用模板可以使程序員建立具有通用類型的函數庫和類庫。模板也是C++語言支持參數化多態性的工具。將一段程序所處理的對象類型參數化,就可以使這段程序能夠處理某個類型範圍內的各種類型的對象,這就是參數化多態性。被參數化的一段程序將會處理一定范圍內的若干種不同類型的對象,即對於一定范圍內的若干不同類型的對象的某種操作將對應著一個相同結構的實現。而模板這種工具就是用來解決這個問題的。由於C++語言的程序結構主要是由函數和類構成的,因此,模板也具有兩種不同的形式:函數模板和類模板。
4、函數模板與模板函數
函數模板是對一組函數的描述,它不是一個實實在在的函數,編譯系統並不產生任何執行代碼。
當編譯系統在程序中發現有與函數模板中相匹配的函數調用時,便生成一個重載函數,該重載函的函數體與函數模板的函數體相同。該重載函數稱為模板函數。
函數模板與模板函數的區別如下:
(1) 函數模板不是一個函數,而是一組函數的模板,在定義中使用了參數類型。
(2) 模板函數是一種實實在在的函數定義,它的函數體與某個模板函數的函數體相同。
編譯系統遇到模板函數調用時,將生成可執行代碼。函數模板是定義重載函數的一種工具。一個函數模板只為一種原型函數生成一個模板函數,不同原型的模板函數是重載的。這樣就使得一個函數只需編碼一次就能用於某個范圍的不同類型的對象上。因此,可以說函數模板是提供一組重載函數的樣板。
D. c語言中一個模板中「^!」是什麼意思
是你所想像的那麼復雜:
你所定義的min函數模板和xutility的min函數模板的名字是一樣的,編譯器認為你是在重載xutility中的min函數,而你那樣重載明顯是不行的!所以的話你只要改一下函數的名字即可。
#include <iostream>,這一行將iostream包含進來了,估計這個文件或者是它所包含的文件中一某一個頭文件將xutility文件include進來了。。。
然後你又using namespace std;使用std命名空間,而xutility中的min函數模板正是定義在std名字空間之下,所以xutility中的min函數模板起作用了。
你將using namespace std;去掉也可以解決問題, 但cout換成std::cout,endl換成std::endl即可。
至於VC6對STL的支持有限,固並沒有所錯。
希望我的問答對你有所幫助!
E. c語言菜單模板
#include
#include
void function1(){
}
void function2(){
}
void function3(){
}
int main(int argc, char *argv[]){//主函數
char choice; //暫存選擇
while(true){
printf("-----------------主題-----------21/11/14 18:38\n\n");
printf("1:功能1\n2:功能2\n3:功能3\n4:退出\n請選擇操作:");
scanf("%c",&choice);
switch(choice){
case '1' : function1();break;
case '2' : function2();break;
case '3' : function3();break;
case '4' : return 0;break;
}
system("cls");
}
}
F. 編寫c語言程序時構成程序的基本模板叫什麼
編寫c語言程序時構成程序的基本模板叫:函數
G. c++模板概念是什麼詳細點
有以下這樣3個求加法的函數:
int Add(int x,int y)
{
return x+y;
}
double Add(double x,double y)
{
return x+y;
}
long Add(long x,long y)
{
return x+y;
}
它們擁有同一個函數名,相同的函數體,卻因為參數類型和返回值類型不一樣,所以是3個完全不同的函數。即使它們是二元加法的重載函數,但是不得不為每一函數編寫一組函數體完全相同的代碼。如果從這些函數中提煉出一個通用函數,而它又適用於多種不同類型的數據,這樣會使代碼的重用率大大提高。那麼 C++的模板就可解決這樣的問題。模板可以實現類型的參數化(把類型定義為參數),從而實現了真正的代碼可重用性。C++中的模板可分為函數模板和類模板,而把函數模板的具體化稱為模板函數,把類模板的具體化成為模板類。
H. c語言編程時的模板裡面{跟//是什麼意思
{和}是匹配的
表示一個單獨的
程序段
。
當if
while
for等
這類
控制語句
,要包含多餘一句的語句時
需要用{}括起來。
//表示注釋
。
//之後到行末
只給編寫程序的人看,
編譯器
不會處理。
I. C語言elemtype
我理解你說的意思是不是想讓elemtype可以替換任意一種類型?
如果是的話,這種東西叫做模板,它是C++的內容,不在C語言的范疇內。
具體用法是:
template <typename elemtype>
typedef struct{
elemtype *elem;
int length;
int listsize;
}sqlist;
之後聲明變數時要賦予elemtype一個已知的類型,比如int。
struct sqlist<int> a;
對於a這裡面的elemtype就變成了int。
不過這是C++的內容,C裡面不能用。
如果不用模板,而必須在C語言里用的話,有兩種方法。
1. 之前聲明它
typedef int elemtype;
2. 之前預編譯它
#define elemtype int
J. 在c語言中如何實現函數模板
各種用
C
語言實現的模板可能在使用形式上有所不同。現以一個求和函數
Sum
為例,用
C++
Template
可寫如下:
template
R
Sum(const
T
*array,
int
n)
{
R
sum
=
0;
for
(int
i
=
0
;
i
<
n
;
++i)
sum
+=
i;
return
sum;
}
如果不是內置類型,該模板隱式地需要
有R
R::operator+=(T)運算符可用。
1.
使用函數指針作為
Functor
替換者
Typedef
struct
tagAddClass
{
Void
(*add)(char*
r1,
const
char*
r2);
Int
elemSize;
Char
sum[MAX_ELEM_SIZE];
}
AddClass;
void
Sum(AddClass*
self,
const
char*
array,
int
n)
{
for
(int
i
=
0
;
i
<
n
;
++i)
self->add(self->sum,
array
+
i*self->elemSize);
}
使用時:
Void
AddInt(char*
r1,
const
char*
r2)
{
*(long*)r1
+=
*(int*)r2;
}
AddClass
addClass
=
{AddInt,
2,
0
};
Int
array[100];
Read(array);
Sum(&addClass,
array,
100);
…..
2.
用宏作為Functor的替換者
#define
GenSumFun(SumFunName,
Add,
RetType,
ElemType)
RetType
SumFunName
(const
ElemType
*array,
int
n)
\
{
RetType
sum
=
0;
for
(int
i
=
0
;
i
<
n
;
++i)
Add(sum,
i);
return
sum;
}
使用時:
#define
AddInt(x,
y)
((x)
+=
(y))
GenSumFun(SumInt,
AddInt,
long,
int)
…..
Int
array[100];
Read(array);
Long
sum
=
SumInt(array,
100);
…..
3.
所有可替換參數均為宏
至少需要一個額外的文件(實現文件)為
impsum.c
/*
impsum.c
*/
RetType
FunName(const
ElemType
*array,
int
n)
{
RetType
sum
=
0;
for
(int
i
=
0
;
i
<
n
;
++i)
Add(sum,
i);
return
sum;
}
使用時:
#undef
RetType
#undef
FunName
#undef
ElemType
#undef
Add
#define
AddInt(x,
y)
((x)
+=
(y))
#define
RetType
long
#define
FunName
SumInt
#define
ElemType
int
#define
Add
AddInt
#include
impsum.c
…..
Int
array[100];
Read(array);
Long
sum
=
SumInt(array,
100);
4.
總結:
第一種方法,易於跟蹤調試,但是效率低下,適用於對可變函數(函數指針)的效率要求不高,但程序出錯的可能性較大(復雜),模板函數(Sum)本身很復雜,模板參數也比較復雜(add)的場合。
第二種方法,效率高,但很難跟蹤調試,在模板函數和模板參數本身都很復雜的時候更是如此。
第三種方法,是我最近幾天才想出的,我認為是最好的,在模板參數(Add)比較復雜時可以用函數(第二種也可以如此),簡單時可以用宏,並且,易於調試。在模板函數本身很復雜,而模板參數比較簡單時更為優越。但是,可能有點繁瑣。
