Xtreme實現MFC視圖分割
摘要: 閱讀全文posted @ 2010-07-07 17:46 Alex@VCC 閱讀(2696) | 評論 (0) | 編輯 收藏
posted @ 2009-04-14 21:51 Alex@VCC 閱讀(2382) | 評論 (1) | 編輯 收藏
posted @ 2009-04-08 20:58 Alex@VCC 閱讀(1759) | 評論 (7) | 編輯 收藏
posted @ 2009-04-06 21:20 Alex@VCC 閱讀(1675) | 評論 (2) | 編輯 收藏
posted @ 2009-04-06 15:21 Alex@VCC 閱讀(3156) | 評論 (7) | 編輯 收藏
posted @ 2009-04-05 22:51 Alex@VCC 閱讀(1756) | 評論 (3) | 編輯 收藏
上C++課程的時候老師總是鼓吹模板如何重要,但是真正上課時候卻將該部分跳過。平時做項目寫程序雖然天天接觸STL,但說到如何實現模板真的是道不出其一二。現將這幾天看C++Primer中的一些重要概念提取出來,以備不時之需。
1,模板的用處。
模板其實也是多態思想的一種體現,不過不是C++那個運行時多態,而是編譯時多態。那么用在什么地方呢?個人感覺用的最多的是在數據結構中,一些經典的數據結構(Queue,Stack)用模板類實現確實事半功倍。至于其他地方嘛。。。也許是自己的功力不夠,幾乎就沒有用過(設計模式不也是一樣的道理嘛,囧)
2,模板定義
模板函數定義:
template<typename T>
int compare(const T &v1,const T &v2);
內聯函數:
inline template<typename T> int compare(const T &v1,const T &v2);
posted @ 2009-03-11 19:56 Alex@VCC 閱讀(1448) | 評論 (1) | 編輯 收藏
看模板類的時候發現有些地方使用到了友元,上課學的記不得了,趕緊溫習下。。。
友元概念就不羅嗦了,使用也簡單,就兩種形式:
1.友元函數:friend ret-type classname::funname(....);
2.友元類:friend class classname;
唯一要注意的就是不管是友元函數還是友元類,定義友元關系前必須先聲明
友元類其實還是有些故事要說的,一旦類繼承起來友元關系還是有些小復雜的,下面簡單說明:
C中聲明A是其友元類,那么最基本的就是A可以使用C中的private方法或者對象。
圖中可見,A是B的基類,C是D的基類。ABCD中就有如下關系:
1.B新增的方法不能訪問C的私有成員
2.B從A繼承而來的方法可以訪問C的私有成員
3.A只能訪問D中從C中繼承而來的私有成員,D中新增的私有成員不能訪問!
總結起來就是友元關系不可以繼承,但對已有的方法來說訪問權限不改變。如果改寫基類的方法則訪問權限改變
PS : 要特別謝謝有朋友留言糾正了我的錯誤,這次將測試用代碼一并貼出
class C
{
friend class A;
private :
int numC;
};
class D : public C
{
private:
int numD;
};
class A
{
public:
//A是C的友元,可以訪問C的私有成員
void getFromC()
{
C c;
c.numC = 100;
cout<<"getFromC in A : numC = "<<c.numC<<endl;
};
//A不是D的友元,不能訪問D中新增的私有成員,但可以訪問D從C中繼承而來的私有成員
void getFromD()
{
D d;
d.numC = 23;
cout<<"getFromD in A : numC = "<<d.numC<<endl;
//d.numD = 24;
//cout<<"getFromD in A : numD = "<<d.numD<<endl;
}
};
class B :public A
{
public:
//友元關系不能繼承,新增的方法不能訪問C的私有成員
// int getNumB()
// {
// C c;
// c.numC = 100;
// return c.numC;
// }
//改寫方法后對C訪問權限改變,不能訪問C的私有成員
// void getFromC()
// {
// C c;
// c.numC = 100;
// cout<<"getFromC in B : numC = "<<c.numC<<endl;
// }
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
a.getFromC();//輸出——getFromC in A : numC = 100
a.getFromD();//輸出——getFromD in A : numC = 23
B b;
b.getFromC();//輸出——getFromC in A : numC = 100
//調用的還是A::getFromC
return 0;
}
posted @ 2009-03-11 16:15 Alex@VCC 閱讀(3278) | 評論 (4) | 編輯 收藏
posted @ 2009-03-03 19:57 Alex@VCC 閱讀(2230) | 評論 (6) | 編輯 收藏