C 物件導向高階程式設計 四 基礎篇

2022-08-31 17:24:11 字數 2889 閱讀 7862

一.static

二.模板類和模板函式

三.namespace 

一.static

靜態成員是「類級別」的,也就是它和類的地位等同,而普通成員是「物件(例項)級別」的.

類級別的成員,先於該類任何物件的存在而存在,它被該類所有的物件共享.

static 1.修飾變數,該變數時全域性變數,其實靜態變數不歸屬於類中,它的初始化甚至在這個類初始化之前初始化,且靜態變數必須初始化,且只會被初始化一次

1

class

account 5};

6double account::m_rate = 8.0;//

static變數初始化(定義)

上面我們可以看到,我宣告乙個靜態變數m_rate,在類中僅僅是宣告,第6行才是真正的初始化(其實叫做定義,[定義:寫一行**使他獲得記憶體叫做定義])

即使你多次初始化m_rate也沒有用,因為m_rate只會被初始化一次

static 2.修飾成員函式,第4行 就是乙個成員函式,他跟靜態變數同樣不歸屬與這個類,所以靜態函式沒有this指標,即靜態函式不能呼叫非靜態成員變數

那麼現在現在我們會想一下非靜態成員函式如

1

class

complex26

...7 }

上面的real()函式呼叫的時候

complex c1,c2,c3;

cout

<< c1.real();//

c1呼叫real(); c1就是this

cout << c2.real();

編譯器會編譯成這樣

complex c1,c2,c3;

cout

<< complex::real(&c1);//將this(&c1)傳遞

cout

<< complex::real(&c2);

然後這樣

double real () const

紅色的this是編譯器自動填充的,靜態成員函式沒有this指標,所以不能作用於非靜態成員變數

呼叫靜態函式的兩種方式

account::set_rate(5.0); //

物件呼叫

account a;

a.set_rate(

7.0);//

class name 呼叫

二.模板類和模板函式

1.模板類,下面這個就是模板類,

templateclass

complex

complex& operator += (const complex&);

real ()

const

imag ()

const private

:t re, im;

friend complex& __doapl (complex*, const complex&);

};

模板類會跟你你實際傳進的引數來建立出相應的類

如果你這樣呼叫的話

complex c1(2.5,1.5

); complex

c2(2,6);

他實際上出創造出兩個類

//double型

class

complex

complex& operator += (const complex&);

real ()

const

imag ()

const private

:double

re, im;

friend complex& __doapl (complex*, const complex&);

};//int型

class

complex

complex& operator += (const complex&);

real ()

const

imag ()

const private

:int

re, im;

friend complex& __doapl (complex*, const complex&);

};

這樣做會造成**膨脹,但是與其實用價值相比,這些**膨脹可以忽略

2.函式模板

class

stone

bool

operator

< (const stone& rhs) const

private

:

int_w, _h, _weight;

};

template

inline const t& min(const t& a, const t& b)

當我們呼叫時

1 stone r1(2,3), r2(3,3

), r3;

2 stone r1(2,3), r2(3,3

), r3;

3 r3 = min(r1, r2); r3 = min(r1, r2);

當我們呼叫到第3行是,編譯器會做引數引導 函式模板會被編譯成

inline const t& min(const stone& a, const stone&b)

using declaration 指定開放命名空間

include using

std::cout;//指定開放命名空間,只開放std::cout

intmain()

如有不正確的地方請指正

參照《侯捷 c++物件導向高階程式設計》

C 物件導向高階程式設計 三 基礎篇

概要一.拷貝構造 二.拷貝賦值 三.重寫操作符 四.生命週期 本節主要介紹 big three 即析構函式,拷貝建構函式,賦值拷貝函式,前面主要圍繞不帶指標的class complex本節中主要圍繞帶指標的string類 前面我說過如果你建立的類不帶有指標,那麼多半你可以不用寫析構函式,但是如果你建...

C 物件導向高階程式設計 一 基礎篇

概要 知識點1 建構函式與析構函式 知識點2 引數與返回值 知識點3 const 知識點4 函式過載 要與重寫區分開 知識點5 友元 先以c 的兩大經典class complex 不含指標,string 含指標 之一 complex 複數類 做例子.ifndef complex hpp 防止標頭檔案...

物件導向高階(四)

一 複習 總結上次課內容。再次強調,動手操作很重要,很重要,很重要!二 新課引入 1 再動手寫一次 基類 圖形類,有乙個點座標,有乙個表示面積的方法。派生類 圓類,繼承圖形類,多乙個屬性半徑。同樣擁有表示面積的方法。2 抽象 l當例項方法宣告包含abstract修飾符時,稱該方法為抽象方法。l在類宣...