請搜索"C++模板",大致上就是在結(jié)構(gòu)體/類/函數(shù)等的前面加上template<模板參數(shù)>就能為一份代碼在編譯時創(chuàng)建出能匹配多種類型/數(shù)值的模板,在編譯時會把代碼里用到的模板參數(shù)的符號全部替換模板參數(shù)只能是類型或者整數(shù),如這里的typenameT,表示T是一個類型(typename關(guān)鍵字也可以用class替代,是同一個意思),intsize表示StaticArray的數(shù)組大小用的時候只要聲明為StaticArray<char,16>就表示一個char類型的大小是16的數(shù)組,這個新的<char,16>的類型會在編譯時由編譯器自動創(chuàng)建出來因為是在編譯時就進行替換,所以模板的參數(shù)必須是一開始就確定的常量
首先,問問面向過程與面向?qū)ο蟮膮^(qū)別
一般面試C++的面試者都能回答大概,面試的技巧由淺入深,根據(jù)面試者的回答再引導(dǎo)著考察面向?qū)ο蟮南旅娴膬?nèi)容。
然后,可以考察C相關(guān)知識
C語言基礎(chǔ)還是很重要的,考考概念類的const、static、指針、棧、鏈表、排序算法等很體現(xiàn)基本功的問題。
繼續(xù),考察C++相關(guān)知識
構(gòu)造與析構(gòu)函數(shù),虛函數(shù),函數(shù)重載,類的繼承多態(tài),內(nèi)存模型等。
最后,項目相關(guān)的問題
若面試者做過大型項目或者招聘需求相關(guān)的項目,可以做適當加分。然后根據(jù)項目側(cè)重點,問問項目會用到的知識,比如進程間通訊,通訊協(xié)議,通訊報文與文件處理之類的。
編程能力很重要,編程習慣更不容忽視
一場面試,時間有限,肯定不能把所有知識點都考到,要詳細的考察面試者的各項能力可以增加一場筆試。筆試的編程題必不可少,除了考察編程能力之外,還可以看出一個人的代碼習慣與代碼風格。代碼習慣不好的面試者,需要慎重考慮。
另外,招聘還是要看多方面的看這個人是否合適。技術(shù)能力與項目經(jīng)驗是一方面,性格、價值觀與企業(yè)文化的融合度,個人問題等也是決定因素。
layui中將數(shù)據(jù)庫數(shù)據(jù)通過layui table渲染到前端表格,非常簡單,但是如果數(shù)據(jù)庫存儲的信息不能被直接展示,項目中該頁面有好幾個這樣的字段,會員類型,支付類型,會員時長還有平臺類型;例如數(shù)據(jù)庫有一個類型字段:1和2,1表示鉆石會員,2表示至尊會員,前端顯然不能直接顯示1和2,而是應(yīng)該根據(jù)后端返回的數(shù)字進行判斷,展示相應(yīng)的內(nèi)容。
Templates文件夾中存儲著常用程序的模板文件,模板就是包含有段落結(jié)構(gòu)、字體樣式和頁面布局等元素的樣式。它決定了文檔的基本結(jié)構(gòu)和設(shè)置的樣式。
每個模板都含有某個指定的節(jié)點被匹配時所應(yīng)用的規(guī)則。xsl:template其實就是用于構(gòu)建模板的元素。
template是一款為廣大的企業(yè)以及個體戶專業(yè)提供的稅務(wù)繳費軟件,template這款軟件可以一鍵了解高效的操作方式,稅費查看瀏覽,簡單便利,還能計算出用戶不知道的稅務(wù)詳情,操作便利,功能服務(wù)齊全,可以學習相關(guān)的稅務(wù)知識,軟件內(nèi)容超級豐富。
實際上可以說沒有區(qū)別。
按 C++ 標準來說,template<typename T> 用于基礎(chǔ)數(shù)據(jù)類型,typename 指類型名,T 可以取 char int double 等。
template<class T> 用于類,T 可以取任何類。
但是這里有一個問題,結(jié)構(gòu)體應(yīng)該用 typename 還是 class? 結(jié)構(gòu)體肯定不是基礎(chǔ)數(shù)據(jù)類型,但也不是類。
所以實際情況是,template<class T> 的 T 也可以取基礎(chǔ)數(shù)據(jù)類型,tempate<typename T> 的 T 也可以取類。
但有一個特例,就是當 T 是一個類,而這個類又有子類(假設(shè)名為 innerClass) 時,應(yīng)該用 template<typename>:
typename T::innerClass myInnerObject;
這里的 typename 告訴編譯器,T::innerClass 是一個類,程序要聲明一個 T::innerClass 類的對象,而不是聲明 T 的靜態(tài)成員,而 typename 如果換成 class 則語法錯誤。
以下這篇文章介紹得比較詳細:
http://blogs.msdn.com/b/slippman/archive/2004/08/11/212768.aspx
從語法上,在C++中(只討論C++中)。class和struct做類型定義時只有兩點區(qū)別:
?。ㄒ唬┠J繼承權(quán)限。如果不明確指定,來自class的繼承按照private繼承處理,來自struct的繼承按照public繼承處理;
?。ǘ┏蓡T的默認訪問權(quán)限。class的成員默認是private權(quán)限,struct默認是public權(quán)限。
除了這兩點,class和struct基本就是一個東西。語法上沒有任何其它區(qū)別。
不能因為學過C就總覺得連C++中struct和class都區(qū)別很大,下面列舉的說明可能比較無聊,因為struct和class本來就是基本一樣的東西,無需多說。但這些說明可能有助于澄清一些常見的關(guān)于struct和class的錯誤認識:
(1)都可以有成員函數(shù);包括各類構(gòu)造函數(shù),析構(gòu)函數(shù),重載的運算符,友元類,友元結(jié)構(gòu),友元函數(shù),虛函數(shù),純虛函數(shù),靜態(tài)函數(shù);
?。?)都可以有一大堆public/private/protected修飾符在里邊;
?。?)雖然這種風格不再被提倡,但語法上二者都可以使用大括號的方式初始化:Aa={1,2,3};不管A是個struct還是個class,前提是這個類/結(jié)構(gòu)足夠簡單,比如所有的成員都是public的,所有的成員都是簡單類型,沒有顯式聲明的構(gòu)造函數(shù)。
?。?)都可以進行復(fù)雜的繼承甚至多重繼承,一個struct可以繼承自一個class,反之亦可;一個struct可以同時繼承5個class和5個struct,雖然這樣做不太好。
?。?)如果說class的設(shè)計需要注意OO的原則和風格,那么沒任何理由說設(shè)計struct就不需要注意。
?。?)再次說明,以上所有說法都是指在C++語言中,至于在C里的情況,C里是根本沒有“class”,而C的struct從根本上也只是個包裝數(shù)據(jù)的語法機制。
最后,作為語言的兩個關(guān)鍵字,除去定義類型時有上述區(qū)別之外,另外還有一點點:“class”這個關(guān)鍵字還用于定義模板參數(shù),就像“typename”。但關(guān)鍵字“struct”不用于定義模板參數(shù)。
如果沒有多態(tài)和虛擬繼承,在C++中,struct和class的存取效率完全相同!簡單的說就是,存取class的datamember和非virtualfunction效率和struct完全相同!不管該datamember是定義在基類還是派生類的。
如果不是為了和C兼容,C++中就不會有struct關(guān)鍵字。因此建議是:如果不需要與C兼容或傳遞參數(shù)給C程序,不要在C++中用struct。
注意class的datamember在內(nèi)存中的布局可不一定是datamember的申明次序。C++只保證處于同一個accesssection的datamember按照申明次序排列。
struct所體現(xiàn)的是一種數(shù)據(jù)結(jié)構(gòu),而class則是體現(xiàn)OOP思想中的"封裝"的特性~~~
還有一個區(qū)別:struct可以用{}賦初值,而class不行
比如聲明如下:
structabc{intm1;floatm2;boolm3;}
可以這么構(gòu)造對象:
abcabcInstance{1,1.0f,false};
struct:屬性
class:屬性+行為
注意:在VC6里,class可以與模板關(guān)鍵字typename互換,但是struct好像就不可以,編譯好像通不過。對這個問題,我專門查了一些資料,發(fā)現(xiàn)網(wǎng)上確實有說struct不能用于模板關(guān)鍵字而class可以,這似乎應(yīng)該是他們的一個不同了。然而,我又看了一下《深度探索C++對象模型》,在書的前幾章(好像就是第一章)Lippman說:本來他的編譯器是不支持將struct作為模板關(guān)鍵字的,但后來改變了,也就是說struct和class除了默認的訪問屬性外,其他場合下真正的完全一樣了。對此,我認為這個按理說是這樣的,但不同的編譯器可能會有自己的處理,就像VC6那樣。
class中有方法,
struct中沒有.
class是一個擴展的struct
array(類型一樣)->struct(類型可以不一致)->class(添加方法)
雖然兩者都可以捆綁行為。
但是,理解不一樣。
struct,就是對程序員全局可見的數(shù)據(jù)與方法。簡化數(shù)據(jù)邏輯結(jié)構(gòu)的設(shè)計??梢哉f是一種自定義的數(shù)據(jù)結(jié)構(gòu)。
而class,則是將數(shù)據(jù)與方法封裝,即讓行為與數(shù)據(jù)一致。則是一種編程方法。即客觀世界在代碼世界中的體現(xiàn)。體現(xiàn)的是一種編程思想。
在C里面:struct不能包含函數(shù),而class可以。
在C++里面:都可以有函數(shù),默認情況下struct中變量是public,而class中是private
有一點不明白,class支持的繼承和多態(tài),struct也支持??
class在賦值運算符右邊出現(xiàn)需要有定義的拷貝構(gòu)造函數(shù),而struct是默認的位拷貝.
但是一般從兼容C的角度考慮,struct里面只包含數(shù)據(jù)成員而不包含成員函數(shù),這只是一個編程習慣問題。
template是指模板,型板。特指切割木材、紙張、金屬等使用的模板,樣板example是例子的意思。是平常舉的一個事例,for example就是舉個例子的意思sample是樣本的意思,指做研究調(diào)查所抽取一定的人數(shù)或物品,叫樣本
vue template和html5的template用法比較
1.html5中的template標簽
html中的template標簽中的內(nèi)容在頁面中不會顯示。但是在后臺查看頁面DOM結(jié)構(gòu)存在template標簽。這是因為template標簽天生不可見,它設(shè)置了display:none;屬性。
2.template標簽操作的屬性和方法
content屬性:在js中template標簽對應(yīng)的dom對象存在content屬性,對應(yīng)的屬性值是一個dom節(jié)點,節(jié)點的nodeName是#document-fragment。通過該屬性可以獲取template標簽中的內(nèi)容,template對象.content可以調(diào)用getElementById、querySelector、querySelectorAll方法來獲取里面的子節(jié)點。
innerHTML:可以獲取template標簽中的html
3.vue中的template
(1)template標簽在vue實例綁定的元素內(nèi)部
它是可以顯示template標簽中的內(nèi)容,但是查看后臺的dom結(jié)構(gòu)不存在template標簽。如果template標簽不放在vue實例綁定的元素內(nèi)部默認里面的內(nèi)容不能顯示在頁面上,但是查看后臺dom結(jié)構(gòu)存在template標簽。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>template</title>
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<template id="tem">
<div id="mdiv">
<h1 id="title">hello world! tem</h1>
</div>
</template>
<div id="app">
<template>
<div>
<h1 id="title">hello world! app</h1>
</div>
</template>
</div>
<script type="text/javascript">
var tem =document.getElementById("tem");//獲取template標簽
console.log(tem);
console.log(tem.innerHTML); //
var title = tem.content.getElementById("title"); //在template標簽內(nèi)部內(nèi)容,必須要用.content屬性才可以訪問到
console.log(title);`在這里插入代碼片`
</script>
<script>
new Vue({
el : '#app',
})
</script>
</body>
</html>
(2)vue實例中的template屬性
將實例中template屬性值進行編譯,并將編譯后的dom替換掉vue實例綁定的元素,如果該vue實例綁定的元素中存在內(nèi)容,這些內(nèi)容會直接被覆蓋。
特點:
1)如果vue實例中有template屬性,會將該屬性值進行編譯,將編譯后的虛擬dom直接替換掉vue實例綁定的元素(即el綁定的那個元素);
2)template屬性中的dom結(jié)構(gòu)只能有一個根元素,如果有多個根元素需要使用v-if、v-else、v-else-if設(shè)置成只顯示其中一個根元素;
3)在該屬性對應(yīng)的屬性值中可以使用vue實例data、methods中定義的數(shù)據(jù)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>template</title>
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<template id = "first">
<div v-if = "flag">第一個{{msg}}</div>
<div v-else>第二個</div>
</template>
<div id = "app"></div>
<abc id="second">
<div v-if="flag">{{msg}}</div>
<div v-else>111</div>
</abc>
</script>
<script>
new Vue({
el:"#app",
data:{
msg:"hello",
flag:true
},
template:"#first"//通過該屬性可以將自定義的template屬性中的內(nèi)容全部替換app的內(nèi)容,并且會覆蓋里面原有的內(nèi)容,并且在查看dom結(jié)構(gòu)時沒有template標簽
});
</script>
</body>
</html>
如果將上面的template:"#first"改為template:"#second",則標簽中的內(nèi)容也會顯示在頁面上。所以此處利用template標簽來定義vue實例中需要設(shè)置的template屬性。(?)
template多指模板,固定的模板框架,比較具體。比如,作文模板。
model多指模型,比如,機器人模型