C 學習筆記 3

2021-09-02 23:26:39 字數 1942 閱讀 7792

new int;

new int[10];

delete p;

delete p;

new 和 delete 是關鍵字也是運算子

new 的時候是先得到空間,然後初始化; delete 的時候是先析構,然後收回空間

在動態記憶體分配的時候,程式內部有乙個資料表來記錄你每次申請的記憶體的首位址和大小

delete p; 的時候程式先在資料表裡去查詢p,找到後刪除資料表中p的這一項並**記憶體

int *a = new int[10];   a++; delete a;  會執行出錯,因為在資料表中找不到a

student *p = new student[10];

在做delete p; 

的時候只析構了p所指的那個物件,後面9個沒有析構,但是整個分配空間都被收回了,因為資料表中記錄的空間的大小就是這麼多

delete p; 就會全部析構

tips for delete:乙個類的private成員只有這個類裡面的成員函式才可以訪問

同乙個類的物件之間是可以互相訪問私有成員的

這種檢查機制只有在編譯的時候才會做,在執行的時候是不會的,這是因為當編譯完以後,生成的東西已經不屬於物件導向了

friend 的授權是在編譯時刻檢查的

a宣告b是自己的友元,那麼b就可以訪問a中的私有成員,但是a不能訪問b的私有成員

在c++ struct和class是一樣的,但是有細微的差別

沒有宣告訪問屬性:

class defaults to private

struct defaults to public

兩者只有這一點區別

在c++一般首選class

自己寫了建構函式,編譯器就不會再自動生成乙個default constructor

initalize list (初始化列表)

可以初始化任何型別的資料

private:

const int x, y;

public:

print(int xa, int ya) : x(xa), y(ya) {}

這種寫法與放在{}內是有區別的,這個初始化早於建構函式被執行

student::student(string s) name(s) {}       // 這種叫做初始化

student::student(string s)     // 這種叫做賦值

不是說寫在建構函式裡面就是初始化

建議類裡面的所有成員變數都用 initalizer list 來初始化,而不要在建構函式裡面做賦值

learning record code:

#include using namespace std;

class a // 建構函式和析構函式不能是私有的

~a()

void set(int i)

void f() ;

};struct x; // 前向宣告

struct y ;

struct x ;

void x::initialize()

void g(x *x, int i)

void y::f(x *x)

struct z ;

int main()

// delete p;

x tm;

y ym;

tm.initialize();

ym.f(&tm);

g(&tm, 10);

return 0;

}

C 學習筆記 3

最近在寫code時候,發現了關於static變數的一些使用需要注意的地方。具體的情況可以看下面的例子 aclass.h 宣告了aclass class aclass int data aclass.cpp 定義了乙個static的aclass例項 include aclass.h static ac...

c 學習筆記3

toolstrip工具欄的用法 toolstrip的設定 影象和選單用到的屬性 displaystyle屬性和textimagerelation屬性。displaystyle屬性設定工具欄上每乙個按鈕上顯示影象 顯示文字或者顯示影象和文字,預設是只顯示影象。textimagerelation屬性設定...

C 學習筆記3

陣列 foreach 多維陣列 一次new 鋸齒陣列 陣列的元素是陣列,還得再new子陣列 array類 length arraylist 動態陣列 泛型list 是具有佔位符的,型別安全性,效能優於arraylist dictionary 委託delegate和事件event 或者 用於關聯事件 ...