C 高階筆記

2021-09-09 06:33:21 字數 3248 閱讀 4302

c++: c:

type(built-in,struct)

data

function

資料和函式包在一起,資料有很多分,函式只有乙份。以此建立物件。

class,struct

complex c1(2,1);

complex c2;

complex *pc = new complex(0,1)

string s1("hello ");

string s2("world ");

string *ps = new string;

傳遞者需要知道是以reference形式接收

全域性函式沒有this指標

temp object 臨時物件 typename()

建立新的local物件,直接返回類的名稱+括號來new乙個物件。

在設計類的時候,要考慮一下方法要放在成員function還是local function

如果乙個類有指標成員,就必須有拷貝構造和拷貝複製函式

##棧,堆與記憶體管理:

scope:作用域

{}stack:是存在於某個作用域(scope)的一塊記憶體空間(memory space)。例如當你呼叫函式,函式本身即會形成乙個satck,用來放置它接收的引數,以及返回位址。在函式本身內宣告的任何變數,起所使用的記憶體塊都取自與stack。

stack object只要離開作用域,它的生命週期就終止了

heap:或者說是system heap,是由作業系統提供的一塊全域性(global)記憶體空間,程式可動態分配(dynamic allocated,就是用new),從中取得若干塊(block)

array new 一定要搭配 array delete

delete:先呼叫析構函式dtor,再釋放記憶體。

例如:delete ps;

記憶體溢位:

##動態分配所得的記憶體塊(memory block),in vc

complex* p = new complex[3]

string* s = new string[3]

##!!注意一種情況,連串賦值的時候,返回型別不能為void!要返回物件(或者的引用)

return &this;//傳出去的人,不必知道接受端用什麼形式來接受。this所指的是乙個東西,不管是東西還是引用,反正都傳東西出去,具體傳出去是什麼,主要看返回型別。

##namespace 經驗談

namespace起著包裝作用

namespace std

使用namespace方法:

##進一步了解static:

complex c1,c2,c3;

cout << c1.real();

cout << c2.real();

原來的形式為

complex c1,c2,c3;

cout << complex::real(&c1);

cout << complex::real(&c2);

此時,c1的位址成為指標。

composition(復合)

delegation(委託):composition by reference

adapter(變壓器,改造,適配)

例如:

virtual void draw() const = 0; //pure virtual,子類一定要定義

virtual void error(const std::string& msg);//impure virtual

int objectid const; //non-virtual,不需要子類重新定義它

舊式的 headers 內的元件不封裝 namespace 「std」

注意:容器裡面的東西一定要一樣的大小!

##關於轉換函式,沒有返回物件。

//轉換函式-->沒有返回型別

class fraction

// operator double() const

//

fraction operator+ (const fraction& f)

private:

int m_numerator;

int m_denominatir;

};fraction f(3,5);

fraction d = f + 4;//呼叫 non-explicit ctor 將4 轉換為fraction,然後呼叫operator +

//轉換函式-->沒有返回型別

class fraction

// operator double() const

//

fraction operator+ (const fraction& f)

private:

int m_numerator;

int m_denominatir;

};fraction f(3,5);

fraction d = f + 4;//呼叫 non-explicit ctor 將4 轉換為fraction,飯後呼叫operator +

templateclass shared_ptr

t*operator->() const

shared_ptr(t* p):px(p){}

private:

t* px;

long * pn;

};

##function-like class 所謂仿函式,也叫函式物件,操作符過載,小括號 (乙個class設計出來像乙個function)

c++標準庫中,仿函式所使用的奇特的base classes.

##variadic templates,用遞迴繼承,tuple

##class template類模板,fanction template 模板函式,number template 成員模板

函式模板不必指明它的type,因為函式模板一定是去呼叫,呼叫的時候會輸入引數。

例子://泛化

template < class key >

struct hash {};

//特化

template<>

struct hash

};template<>

struct hash

};template<>

struct hash

};

C高階程式設計筆記一

有關螢幕操作的函式 void clrscr void 該函式將清除視窗中的文字,並將游標移到當前視窗的左上角,即 1,1 處。void clreol void 該函式將清除當前視窗中從游標位置開始到本行結尾的所有字元,但不改變游標原來的 位置。void delline void 該函式將刪除一行字元...

C 高階程式設計筆記(一)

c 與.net c 本身是一種語言 net framework是乙個平台即乙個環境。只是c 編譯器專門用於.net,所以c 總是使用.net執行。net framework 的核心是執行執行環境 公共語言執行庫clr net執行庫 在clr下執行的 稱為託管 mannaged code clr對於源...

C 學習筆記(十二) 事件高階

多用途的事件處理程式 timer.elapsed 事件的簽名包含了時間處理程式常見的兩個引數 1 object source 引發事件的物件的引用2 elapsedeventargs e 由事件傳送的引數 在這個事件中使用object型別引數的原因是,我們常常要為由不同物件引發的幾個相同事件使用同一...