c 常見問題

2021-08-28 14:24:17 字數 2355 閱讀 9737

編譯器總是根據型別來呼叫類成員函式。但是乙個派生類的指標可以安全地轉化為乙個基類的指標。這樣刪除乙個基類的指標的時候,c++不管這個指標指向乙個基類物件還是乙個派生類的對 象,調刪除線格式用的都是基類的析構函式而不是派生類的。如果你依賴於派生類的析構函式的**來釋放資源,而沒有過載析構函式,那麼會有資源洩漏。 所以建議的方式是將析構函式宣告為虛函式。

struct node  

node * createlist()

node new = (node)malloc(sizeof(node)); // 為節點分配空間

new->member = val; //將使用者輸入的資料賦給節點的成員

tail->next = new; //將最後乙個節點的指標指向下乙個新的節點

new->next = null; //將新節點中的指標置為空

tail = new; //將新節點賦給最後的乙個節點

} return head; //返回頭節點

}

struct* node

node *reverse(node* head)

}

1,如果以乙個基礎類指標指向乙個衍生類物件(派生類物件),那麼經由該指標只能訪問基礎類定義的函式(靜態聯翩)

2,如果以乙個衍生類指標指向乙個基礎類物件,必須先做強制轉型動作(explicit cast),這種做法很危險,也不符合生活習慣,在程式設計上也會給程式設計師帶來困擾。(一般不會這麼去定義)

3,如果基礎類和衍生類定義了相同名稱的成員函式,那麼通過物件指標呼叫成員函式時,到底呼叫那個函式要根據指標的原型來確定,而不是根據指標實際指向的物件型別確定。

虛函式就是為了對「如果你以乙個基礎類指標指向乙個衍生類物件,那麼通過該指標,你只能訪問基礎類定義的成員函式」這條規則反其道而行之的設計。

如果你預期衍生類由可能重新定義乙個成員函式,那麼你就把它定義成虛函式( virtual )。

polymorphism就是讓處理基礎類別物件的程式**能夠通透的繼續適當地處理衍生類物件。

純虛函式:virtual void myfunc ( ) =0;

純虛函式不許定義其具體動作,它的存在只是為了在衍生類鐘被重新定義。只要是擁有純虛函式的類,就是抽象類,它們是不能夠被例項化的(只能被繼承)。如果乙個繼承類沒有改寫父類中的純虛函式,那麼他也是抽象類,也不能被例項化。

抽象類不能被例項化,不過我們可以擁有指向抽象類的指標,以便於操縱各個衍生類。

虛函式衍生下去仍然是虛函式,而且還可以省略掉關鍵字「virtual」。

管道(無名管道)、fifo(命名管道)、訊息佇列、訊號量、共享記憶體

1、首先是定義

程序:是執行中一段程式,即一旦程式被載入到記憶體中並準備執行,它就是乙個程序。程序是表示資源分配的的基本概念,又是排程執行的基本單位,是系統中的併發執行的單位。

執行緒:單個程序中執行中每個任務就是乙個執行緒。執行緒是程序中執行運算的最小單位。

2、乙個執行緒只能屬於乙個程序,但是乙個程序可以擁有多個執行緒。多執行緒處理就是允許乙個程序中在同一時刻執行多個任務。

3、執行緒是一種輕量級的程序,與程序相比,執行緒給作業系統帶來側建立、維護、和管理的負擔要輕,意味著執行緒的代價或開銷比較小。

4、執行緒沒有位址空間,執行緒包含在程序的位址空間中。執行緒上下文只包含乙個堆疊、乙個暫存器、乙個優先權,執行緒文字包含在他的程序 的文字片段中,程序擁有的所有資源都屬於執行緒。所有的執行緒共享程序的記憶體和資源。 同一程序中的多個執行緒共享**段(**和常量),資料段(全域性變數和靜態變數),擴充套件段(堆儲存)。但是每個執行緒擁有自己的棧段,

暫存器的內容,棧段又叫執行時段,用來存放所有區域性變數和臨時變數。

5、父和子程序使用程序間通訊機制,同一程序的執行緒通過讀取和寫入資料到程序變數來通訊。

6、程序內的任何執行緒都被看做是同位體,且處於相同的級別。不管是哪個執行緒建立了哪乙個執行緒,程序內的任何執行緒都可以銷毀、掛起、恢復和更改其它執行緒的優先權。執行緒也要對程序施加控制,程序中任何執行緒都可以通過銷毀主線程來銷毀程序,銷毀主線程將導致該程序的銷毀,對主線程的修改可能影響所有的執行緒。

7、子程序不對任何其他子程序施加控制,程序的執行緒可以對同一程序的其它執行緒施加控制。子程序不能對父程序施加控制,程序中所有執行緒都可以對主線程施加控制。

相同點:

程序和執行緒都有id/暫存器組、狀態和優先權、資訊塊,建立後都可更改自己的屬性,都可與父程序共享資源、都不能直接訪問其他無關程序或執行緒的資源。

C 常見問題

1.預處理 預處理的主要作用就是對資源進行等價替換,最常見的預處理有 檔案包含 include 條件編譯 if,ifndef,ifdef,endif,undef 布局控制 pragma 巨集替換等 define 等。1.1 標頭檔案中放什麼?標頭檔案一般用於類的定義 extern變數和函式的宣告。由...

C 常見問題

問題描述 解決方式 無法解析的外部符號 public cdecl minidl operator operator void 0operator minidl qeaa xz 該符號在函式 public cdecl minidl denseop denseop void 0denseop minid...

C 常見問題

1.reinterpret cast,static cast,dynamic cast const cast區別 2.類的大小 class ctest1 int size sizeof ctest1 1class ctest2 static void func2 protected static i...