模板和異常的問題

2021-03-31 08:56:57 字數 1608 閱讀 9871

模板和異常的問題

在csdn上看到這樣的問題(文的**為http://***munity.csdn.***/expert/topic/3565/3565571.xml?temp=.4035608):

看完題目,這乙個考模板的使用和異常捕獲的題目。

粗略一看,這裡有2個類模板,乙個是template class array;另乙個是template class arraybody。通過這兩個類模板實現乙個二位陣列的模擬。

從上往下看,顯然類模板 arraybody是array的成員(第38行),array可能要訪問arraybody的成員(還不能肯定)。暫時可以猜測第一空第5行為的friend為array,這裡用到的類模板或類不多,填這個的可能性比較大。

第二空(第9行)tpbody為乙個指標,給我的初步印象就是應該new乙個什麼,或者是指向什麼。暫時還不肯定,先空下來。

看第三空,第25行有個catch(char),顯然23行應該是throw('e'),當然不一定是'e',只要是個char就行。

第四空暫時還不知道,第五空肯定是arraybody(irsz,icsz)。為什麼呢?因為這兒顯然是要在構造array之前先構造乙個類(或模板),而array的成員模板(或類)只有 arraybody了,應該是這樣沒錯了。

這裡模擬的是乙個二維陣列,看一下49行 arraya1(10,20);當執行這條語句的時候,應該先執行array的建構函式,而在array建構函式之前,應該先執行arraybody的建構函式,所以最先執行的是arraybody(int irsz,int icsz),tbody是乙個指標,它應該指向什麼呢,應該是分配乙個空間吧,我首先想到的是 第二空填寫 new t[irsz][icsz]。

分配好空間後,給各個成員變數賦初值。好,ok,沒問題。

同樣第50行的**執行同49行。

到了53行,b1 = a1[-5][10]; 首先執行arraybody& operator(int i),再執行t& operator(int j),最後返回的是二位陣列中指定變數的值。第23行 return tpbody[icurrentrow * icolumns + j];這一點可以看出。奇怪,怎麼icurrentrow好像沒有賦初值啊,對!第四空(第41行)應該填寫tbody.icurrentrow。

好,慢著,return tpbody[icurrentrow * icolumns + j]是個一維陣列,那第二空的new t[irsz][icsz]是不是應該該成new t[irsz * icsz]。

就這樣,連猜帶蒙填完了。但是還不能保證它的正確性。

現在就需要驗證才行。拿54行 b1 = a1[10][15];

1.首先執行arraybody& operator(int i),此時a.tbody.icurrentrow應該為10;

2.接著執行t& operator(int j),a.tbody.j應該為15。由於a.tbody.icurrentrow的值(==10)等於允許的最大行數(irows == 10,所以a.tbody.icurrentrow最大只能為9),所以row_error == true , column_ error == false,捕獲異常,因而行下標越界。正如程式注視中提示的。所以應該可以認為這個答案是正確的了。

以上是個人觀點,錯誤之處敬請指教!^_^

Spring模板異常

寫了乙個authcontroller的介面,執行至方法結束,本以為成功了,但是spring卻給了乙個模板無法渲染的異常提示。template might not exist or might not be accessible by anyof the configured template res...

模板及異常(小題)

單選題 2 1 現有宣告 template class test 則以下哪乙個宣告不可能正確。a a.test a b.test int a c.test float a d.test test int a 2 2關於函式模板,描述錯誤的是。a a.函式模板必須由程式設計師例項化為可執行的函式模板 ...

模板與異常處理

1 已知下列主函式 int main 宣告求3個數中最小者的函式模板,並寫出呼叫此函式模板的完整程式。include using namespace std template t min t a,t b,t c int main 2 編寫乙個求任意型別陣列中最大元素和最小元素的程式,要求將求最大元素...