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 或者 用於關聯事件 ...