關於《C 入門經典》的讀後總結

2021-06-22 15:15:00 字數 3805 閱讀 1368

讀後總結以及知識點的通俗化解釋,還有自己容易忽略的部分的記錄

①在大多數情況下,編譯器會檢查是否執行到  return  語句, 如果沒有,就會提示 :「並不是所有的路徑都有乙個返回值」。意思就是你這沒有找到返回值,你的寫法可能是正確的,提示這裡沒有

返回值。

②函式的最後乙個引數可以是引數陣列,既然是引數陣列,那麼引數的個數就是不定的,那麼就需要params定義引數陣列,例如:

static int sumvals(params int vals){}    (詳見p116)

③值引數與引用引數

值引數:就是函式呼叫和使用時,都不會改變值引數的的值。實際就是:我永遠都是這樣的,都定型了,你能怎樣?你來咬我啊!

引用引數:

1)ref關鍵字,所謂的引用傳遞引數,就是把上面引數的 原樣 拿過來用,假若函式呼叫的時候,對引用的引數的改變了,那麼之前的定義好的原引數也會改變。實際就是:我是這樣的,你把我變了,

我就要變身了。

所以ref兩個原則:

首先就是引用的引數不能是常量(因為引數可能會被函式改變),

其次就是引用ref引數時,必須對原引用的引數進行初始化(如果不對引用的引數進行初始化,那就談不上什麼對引數的改變之說了)

ps:在函式定義和函式呼叫時,都要對引數進行引用的定義。即:ref修飾引數

輸出引數:out

類似ref,都是引用傳遞值,這是共通的!

但是out引用的引數必須初始化,即使是把乙個已賦值的引數(變數)用out修飾,那麼在函式呼叫時,就會把這邊變數初始化。總之:out修飾的變數在函式呼叫時都會初始化或者說out修飾的必須是

未被輔助的變數,

這裡的只出不進就是這個意思。就是out修飾的變數都是為賦值的,沒有進之說,但是函式呼叫完,會輸出out修飾的引數

ref的有進有出,也就是說變數有原初值,函式呼叫以後,可能會改變,會輸出ref修飾的變數。這就是有進有出。

ps:函式定義時,不管是用ref還是out,都是對引數的乙個限定,限定它是輸入型(ref)還是輸出型的(out)。

例如:maxvalue(int myarray ,ref int mynumber),

呼叫時直接呼叫引數名稱即可maxvalue(myarray , ref mynumber)

④關於變數的作用域的問題(p143)

static void main(string args)

11         ;

13             string s;

14 //在for迴圈語句不是個s賦值了,怎麼還是報錯「區域性變數s未賦值」

15             for (int i = 0; i < names.length-2; )

16            

21             s=s+names[names.length-1];

22             console.writeline(s);

23 24             console.readkey();

25         }

對於變數s雖然定義了,但是沒有初始化,所以並沒有給變數s乙個記憶體空間的分配,當在迴圈體累進行了初始化,所以實際是在迴圈體內給s分配了記憶體空間,實際就是定義了乙個區域性變數,當迴圈

體結束的時候,變數的生命週期也就結束了。所以當在迴圈體外使用變數s的時候,其實是上面的那個全域性變數只定義沒有初始化,所以會報錯是區域性變數s未賦值。

解決方法:乙個良好的編碼習慣就是當定義某個變數的時候,盡量吧把它初始化,只有初始化,才會給他分配記憶體空間。即string s = "" ;所以在迴圈體也是全域性變數的作用於範圍,在迴圈體的改變

了s的值,在後續迴圈體的訪問變數s的時候,是迴圈體的改變之後的值,實際就是迴圈體外可以訪問迴圈體的值。【重中之重】想要迴圈體結束還是某個初始值的話,要在迴圈體的末尾重新定義變數

string  s ="";

⑤多型是物件導向程式設計中三大機制之一,其原理建立在"從父類繼承而來的子類可以轉換為其父類"這個規則之上,換句話說,能用父類的地方,就能用該類的子類.當從父類派生了很多子類時,由於每個子類

都有其不同的**實現,所以當用父類來引用這些子類時,同樣的操作而可以表現出不同的操作結果,這就是所謂的多型. 【繼承的逆向】

⑥所有的類只能有乙個基類,如果是基類是抽象類,那麼派生類就要實現基類的所有抽象成員。其實實際:我本來張的就抽象,還想繼承我的基因,就得讓你明白繼承我的基因就有風險的,那麼必須我

的願望都得實現。

⑦對於繼承的基類和介面的書寫順序

public class ss :mybase,inte***ce{}

⑧類和介面預設的都是內部類和介面,要想成為公共的訪問的,必須加public

⑨c# typeof() 和 gettype()區是什麼?

1、typeof(x)中的x,必須是具體的類名、型別名稱等,不可以是變數名稱。 

2、gettype()方法繼承自object,所以c#中任何物件都具有gettype()方法,它的作用和typeof()相同,返回type型別的當前物件的型別。 

比如有這樣乙個變數i: 

int32 i = new int32(); 

i.gettype()返回值是int32的型別,但是無法使用typeof(i),因為i是乙個變數,如果要使用typeof(),則只能:typeof(int32),返回的同樣是int32的型別。

1)析構 finalize()

2)建構函式中的this關鍵字:如public mybase():this(5,6){}

public mybase():base(i){}

是先呼叫除自身的其他費預設的建構函式,就是我用了this就是我級別最靠後,你先呼叫其他的。但是要避免進入死迴圈。兩個都用this,就是你先用他,他說你先用他,就這樣,誰都用不了

誰。。。就成了死迴圈!!!

3)介面不能包括 字段、建構函式、析構函式、常量、靜態函式(因為介面要在用介面的類中實現)

4)結構是值型別,類是引用型別

5)淺度複製:利用memberwiseclone()方法,不考慮引用型別

深度複製:利用icloneable介面,已標準的方式進行複製,就是建立成員的新例項(複製值,而不複製引用)

6)關於字段、方法的命名的方式:公有字段 pascalcasing

私有字段  camelcasing

7)欄位的定義: readonly  就是唯讀字段,只能在建構函式中賦值或者在初始化賦值語句中賦值,實際就是只能在起字段初始化的時候定義其值,其他時候不允許改變

static    靜態字段,對於靜態欄位的訪問,要直接用類名進行訪問,不能用類物件訪問,如:class myclass   myclass.myint

靜態的方法也是只能用類名訪問,不能用類物件進行訪問。

8)方法的修飾詞: virtual  【可以重寫我】      虛函式,就是可以寫在父類中,這表明這個函式可以重寫,因為他是虛函式,因為虛,所以可以重新構造它

override 【我是重寫的別人】  這個是寫在派生類中的方法,使用這個關鍵字就是對基類的那個方法重寫了

abstract  【兒子必須實現我】  抽象函式,這個關鍵字是定義基類的方法的,證明這個基類方法是抽象的(一般用於抽象類中),但是這裡必須在基類對他進行重寫實現。

9)關於new隱藏基類的同名方法與重寫的區別

使用override修飾符對方法進行重寫時,基類中的方法必須是abstract或virtual的,這時使用override修飾符,就可以修改基類中抽象或虛方法的實現。

隱藏基類中的方法一般是使用new關鍵字,並不要求基類中的方法是abstract或virtual,可以使用new關鍵字重寫基類中的方法。

但是這種方法不應該過多地使用,因為它破壞了型別之間良好的繼承關係,容易造成理解和維護上的困難

《SQL入門經典》總結

sql入門經典 這本書從考試前就開了個頭,一直到前兩天才看完,拉的戰線也夠長的。放假來了,基本上什麼內容都不記得了。好不容易看完了,就趕緊總結一下吧!該書分為兩大部分,第一部分是第1 3章組成,提供了用於理解資料庫和sql語言的基礎知識,其中包括對資訊的處理,建立 刪除表等內容 第二部分包括必要的資...

《演算法入門經典》1 2章 讀後感

1.資料溢位 a.資料本身在int所表達的範圍內,但資料進行運算 如乘法 後,可能會溢位 include int main 2.scanf a.scanf 的返回值 1 正整數,表示正確輸入引數的個數。2 0,表示使用者的輸入不匹配,無法正確輸入任何值。3 eof,這是在stdio.h裡面定義的常量...

SQL入門經典小總結

完成上一階段的學習後我開始了下一階段的學習,一百多頁的書看起來還是不太容易抓重點,一眼看過去全是字,我的 告訴了我重點,敲黑板圈重點啊,插入更新和刪除資料十分重要,剛好今天看到我們就來總結一下吧 插入資料 insert into 更新資料 update 刪除資料 delete 插入資料 基本語法 i...