總覽c & c++ (轉)
1.0.C++ 和 C
C++是C語言的一個面向(-oriented)的擴充套件(大師們都建議我們在學習C++的時候,把C++當成一門新的語言對待).
C++可以被用來編譯C。你使用C所完成的任何工作,都可以使用C++完成。
C++程式與他們的擴充套件不能在C環境下編譯透過。
2.0.物件導向
2.1.類
類是所有物件導向程式(S)的基本組成。
一個類包含一個(或一組)物件和操作物件的
2.2.類的組成
一個類的定義包含變數和函式的宣告
一個類的定義同樣為變數和函式提供不同的區域
class FILE_C
{
private:
long ptr; // 指標
char name[FNAME_LEN]; // 檔名
short state; // 檔案狀態
short mode; // 檔案
public:
FILE_C(void); // 類構造器
~FILE_C(void);. // 類析構器
short.Open(char *,short); // open 函式
short.Close(void);. // close 函式
short.Read(char *,short); // read 函式
short.Write(char *,short);// write 函式
};
上面的FILE_C類包含四個私有資料成員(物件)和六個操作那些物件的函式
任何有權使用類的物件都必須透過類的函式操作
private關鍵字:說明它裡面的資料除了類成員函式以外的任何物件都不能訪問
2.3.類的構造器和析構器
FILE_C類有一個FILE_C()建構函式和一個~FILE_C解構函式
建構函式與類同名,它在類的例項建立的時候
並且初始化任何類的需要
解構函式在類名之前加上~字元
解構函式可以在類的例項終止時進行進行任何清除工作
類的例項可以用兩種方式建立。
一種是使用標準C語言建立一個變數的方式建立:
short.x; // 建立一個名為x的變數
FILE_C LogFile; // 建立一個類FILE_C的例項
另外一種方式是透過指標和new關鍵字分派一個新的例項:
FILE_C *pLogFile; // 建立一個指向類FILE_C的指標
pLogFile = new FILE_C; // 建立一個例項並且分配空間
2.3.1.使用引數構造
建構函式也可以象其他函式一樣使用引數。
引數使用在建立一個新的類例項的時候
.class FILE_C
{
....
public:
FILE_C(char *pFileName);
};
FILE_C.LogFile("LogFileName"); // 使用引數構造
2.4.類函式呼叫
類函式的呼叫方法與普通的C函式相同
不同的是它們使用相似的語法構造成員資格
.FILE_C LogFile; // 建立一個類FILE_C的例項
.FILE_C *pInputFile;. // 建立一個指向類FILE_C的例項的指標
.pInputFile = new FILE_C; // 建立一個類FILE_C的例項
.LogFile.Open("LogFile",O_APPEND); // 開啟LogFile
.InputFile -> Open("InputDat",O_READONLY); // 開啟InputFile
.InputFile -> Read(buffer,sizeof(buffer)); // 讀 InputFile
從以上的示例可以看出,一個檔案指標從來沒有像標準C檔案函式那樣傳送到FILE_C函式
每一個FILE_C的例項維持它自己的控制資訊
C++通常在類和應用之間使用單一化介面因為類在它自己內部完成
它們包含所有屬性和/或物件的內部描述
2.5.類函式宣告
一個類的定義(比如FILE_C)將可能出現在一個標頭檔案
實際的函式實現將出現在C++原始檔
每一個類函式前面都使用符號::代表它的歸屬
.short FILE_C::Open(char * pFileName,short mode)
{
mode = mode; // 提取私有資料項
strcpy(name,pFileName);
// 開啟操作
return (status);
}
2.6.Inline函式
如果一個類函式執行一個非常簡單的任務,他可以被宣告成一個行內函數
一個行內函數實際上是一個函式的擴充套件,它在類中宣告並實現,透過包含inline宣告
class FILE_C
{
private:
char.name[FNAME_LEN]; // 檔名
.....
public:
FILE_C(char *pFileName) { strcpy(name,pFileName); }
.....
};
上面的示例顯示了FILE_C行內函數構造器的實現
注意:行內函數不能濫用
3.0.繼承類
class BROWSE_C : FILE_C // browse繼承自file
{
private:
short curline;
...
public:
BROWSE_C(void);
~BROWSE_C(void);
OpenFile(char *);
};
上面的示例,BROWSE_C類將不僅可以訪問它所有的成員data/object,而且可以訪問
FILE_C類的所有public/protected成員
下表顯示了父子類的繼承關係
.父..子
.----------..---------
.Private.....在繼承類中不可見
.Protected...在繼承類中被當作私有成員
.Public......在繼承類中被當作受保護的成員
從上表可以看出,BROWSE_C可以使用
任何 FILE_C的public/protected資料和函式 FILE_C
應用程式將不能接受任何
FILE_C 類的私有資料或函式
這些是預設的類安全繼承
3.1.自定義類繼承
當定義繼承類時,預設的安全繼承可以過載:
class BROWSE_C : public FILE_C // browse 繼承自 file
{
private:
short curline;
...
public:
BROWSE_C(void);
~BROWSE_C(void);
OpenFile(char *);
};
上例中,所有的FILE_C 類的公共功能同樣
公開到使用BROWSE_C 類的應用程式中
3.2.容器類
容器類是包含別的類的類。
以下是使用一個類實現binary tree的例子:
class TREE_C
{
private:
struct TNODE_S. // 容器類
{
PVOID pvData;
struct TNODE_S *pstLeft;
struct TNODE_S *pstRight;
};
typedef struct TNODE_S TNODE_T;
typedef TNODE_T *TNODE_P;
typedef TNODE_T **TNODE_PP;
TNODE_P pstHead;
TNODE_P pstNode;
.....
public:
TREE_C(VOID);
~TREE_C(VOID);
SHORT Delete(PVOID); // Remove entry
SHORT Find(PVOID,PPVOID); // Find entry
SHORT Insert(PVOID); // Insert entry
.....
};
typedef TREE_C * TREE_CP;
typedef TREE_C ** TREE_CPP;
在binary tree 例子中,樹中的每一個節點在TREE_C 類的例項
並不是都需要。所以每一個節點包含在TREE_C 類,
並且類TREE_C實行所有的包含在其內的TNODE_S操作
3.3.虛擬函式
虛擬函式提供一種方法為類基類具有
特有的或行為適當的到當前繼承類
class FILE_C
{
private:
char.name[FNAME_LEN]; // file name
.....
public:
FILE_C(char *pFileName) { strcpy(name,pFileName); }
virtual short Reset(void);
};
class BROWSE_C : FILE_C // browse derived from file
{
private:
short curline;
...
public:
BROWSE_C(void);
~BROWSE_C(void);
OpenFile(char *);
short Reset(void);
};
short BROWSE_C::Reset(void)
{
FILE_C::Reset();
curline = 0;
}
4.0.操作過載
自從C++類定義詳細的在類的例項操作
以來,C++允許所有標準操作(i.e.'+','-', '*', '/', '++', '--')
可以被當前類重新定義或過載
class STRING_C
{
private:
char * pChar;
int len;
....
public:
STRING_C(const char * = 0); // prov default value
~STRING_C(delete pChar);
void operator+(char *)
};
STRING_C::operator+(char *pC)
{
char * pBuf;
pBuf = new char[len=strlen(pC)+len];
strcpy(pBuf,pChar);
strcat(pBuf,pC);
delete pChar;
pChar = pBuf;
}
STRING_C Str("ABC");
Str + "DEF";. // 現在pChar = 'ABCDEF'
5.0.C++ 輸入/輸出
C++輸出把C語言的printf家族簡單化
C++定義關鍵字cout,cin,stdout,stdin裝置
C++根據當前變數型別自動格式化
/* C */
printf("%s = %dn", szRate, sRate);
/* C++ */
cout << szRate << " = " << sRate << "n";
// C++另外一種方式
cout << form("%s = %dn", szRate,sRate);
/* C */
scanf("%d",&sRate);
/* C++ */
cin >> sRate;
7.0.Reference Variables
C++提供一種語法允許程式設計師更加容易地使用指標到應用程式中
/* C */
short Afunc(short * psShort)
{
*psShort++;
}
/* C++ */
short Afunc(short & Short)
{
Short++;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991227/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C/C++標頭檔案一覽(轉)C++
- 【C++】 C++知識點總結C++
- 從C轉入C++ (轉)C++
- C/C++標頭檔案一覽C++
- C/C++指標總結C++指標
- C++:字串總結C++字串
- C++庫彙總C++
- 【C++】C++之型別轉換C++型別
- C++ 轉型C++
- The New C++ (轉)C++
- C# 和 C++ (轉)C#C++
- C/C++ 通用 Makefile(轉)C++
- borland c++ bulder的檔案操作總結-2 (轉)C++
- borland c++ bulder的檔案操作總結-1 (轉)C++
- borland c++ bulder的檔案操作總結-3 (轉)C++
- borland c++ bulder的檔案操作總結-4 (轉)C++
- C++程式碼最佳化方法總結(一) (轉)C++
- 資料結構學習(C++)——圖(總結) (轉)資料結構C++
- C++程式碼最佳化方法總結(四) (轉)C++
- C++程式碼最佳化方法總結(三) (轉)C++
- 資料結構學習(C++)——樹(總結) (轉)資料結構C++
- C++程式碼最佳化方法總結(二) (轉)C++
- C++、C++學習之我見 (轉)C++
- C/C++——static用法完整總結C++
- C++除錯總結C++除錯
- c++學習總結C++
- C++ const 總結C++
- 【C++泛讀總結】C++
- C++ STL容器總結C++
- C/C++知識要點總結之C++物件導向C++物件
- c++經典(轉)C++
- C++簡介 (轉)C++
- Prefer C++ (二) (轉)C++
- Prefer C++(三) (轉)C++
- C/C++重要知識點彙總C++
- C/C++——const用法完整總結C++
- (轉貼) C++,C#,Java功能比較 (.NET) (C#) (C/C++)C++C#Java
- 學懂現代C++——《Effective Modern C++》之轉向現代C++C++