strncpy const 建構函式 析構函式

2021-06-21 01:13:45 字數 1403 閱讀 8998

char *strncpy(char *s1, const char *s2, size_t n);

把字串s2中的字元拷貝到字串s1中,最多拷貝n個字元,返回s1的值

strncpy不一定拷貝其第二個引數的終止字元null,只有在被拷貝的字元個數至少比字串長度大1才拷貝終止字元

char a = "welcome to library";

char b[10];

strncpy(b, a, 9);

b[9] = '\0';

在第三個引數小於或者等於第二個引數字串長度的時候必須為第乙個引數追加終止字元null

對於const物件而言顯然它不能通過修改,所以在建構函式中使用賦值語句初始化是錯誤的

所有的資料成員都可以使用成員初始化器形式進行初始化,但是const資料成員和引用的資料成員必須使用成員初始化器進行初始化

成員初始化器出現在建構函式的引數列表和作為建構函式體開始到左花括號之間。

成員初始化器由資料成員名稱後面緊跟著包含該成員初始化值的一對圓括號組成。

析構函式不接收任何引數,也不返回值。

「析構函式實際上並不釋放物件的儲存空間,它在系統收回物件的記憶體之前執行掃尾工作,使得記憶體可以重新用於儲存新的物件」

因為不是計算機專業,所以書上這句話不是特別懂,「掃尾工作是什麼工作?」

乙個類有且僅有乙個析構函式

不顯式提供的話,編譯器會生成乙個「空的」析構函式

至於析構函式的執行順序,與相應的建構函式的呼叫順序相反,這個可能應該類似於堆疊吧,越早構造的越晚彈出,等徹底確定了再補充

析構函式是作用於物件嘛,所以物件的儲存類別也可以改變析構函式的執行順序(static global local)

因為離開物件的作用域時候,析構函式才會執行

所以正常情況下static和global物件在main函式結束才執行析構函式

當乙個類a作為類b的成員時,

a a;

b b(b1, b2, a);

當b物件b撤銷時,先執行b的析構函式再執行b中的成員a的析構函式

邏輯上好像也是合理的,因為對於b而言,b中的成員是先建立的,然後建立b,析構時候相反,大概可以這樣理解

用vs2010 在析構函式裡面寫了輸出語句測試,執行的時候在螢幕上總是一閃而過,沒辦法在螢幕上顯示輸出語句

看到有人提供了一種方法是main函式裡面 又加了乙個花括號(右括號是在system("pause")前面),

這樣執行完花括號的時候就可以在螢幕上顯示出析構函式裡的語句了

但是這招對static和global變數不行,畢竟它們是在main函式結構才執行的

內聯函式,建構函式,靜態函

inline,static,constructor三種函式都不能帶有virtual關鍵字。inline是編譯時展開,必須有實體 static屬於class自己的,也必須有實體 virtual函式基於vtable 記憶體空間 constructor函式如果是virtual的,呼叫時也需要根據vtabl...

原創 ReadOnly和Static建構函式

先來看乙個例子 public sealed class dataaccess public static dataaccess instance 這裡說明兩個知識點 static建構函式 quote 1 靜態建構函式既沒有訪問修飾符,也沒有引數。因為是.net呼叫的,所以像public和privat...

20170412 cpp上機作業 複製建構函式

這次作業有點難了。因為我上理論課的時候在睡覺 題目如下 上週講過,物件賦值時,1 物件的賦值只對其中的資料成員賦值,而不對成員函式賦值 2 類的資料成員中不能包括動態分配的資料,否則在賦值時可能出現嚴重後果。例如 class string string string const char p 問 會...