一.static
二.模板類和模板函式
三.namespace
一.static
靜態成員是「類級別」的,也就是它和類的地位等同,而普通成員是「物件(例項)級別」的.
類級別的成員,先於該類任何物件的存在而存在,它被該類所有的物件共享.
static 1.修飾變數,該變數時全域性變數,其實靜態變數不歸屬於類中,它的初始化甚至在這個類初始化之前初始化,且靜態變數必須初始化,且只會被初始化一次
1class
account 5};
6double account::m_rate = 8.0;//
static變數初始化(定義)
上面我們可以看到,我宣告乙個靜態變數m_rate,在類中僅僅是宣告,第6行才是真正的初始化(其實叫做定義,[定義:寫一行**使他獲得記憶體叫做定義])
即使你多次初始化m_rate也沒有用,因為m_rate只會被初始化一次
static 2.修飾成員函式,第4行 就是乙個成員函式,他跟靜態變數同樣不歸屬與這個類,所以靜態函式沒有this指標,即靜態函式不能呼叫非靜態成員變數
那麼現在現在我們會想一下非靜態成員函式如
1class
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.模板類,下面這個就是模板類,
templateclasscomplex
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.函式模板
classtemplatestone
bool
operator
< (const stone& rhs) const
private
:
int_w, _h, _weight;
};
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 usingstd::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在類宣...