類與物件
一、 定義類和物件
1. 一般形式:
class 類名 定義類時首字母要大寫;
public;公有段資料成員和成員函式
protected;保護段資料成員和成員函式
private;私有段資料成員和成員函式
};
此處分號不可省略!!!
private
用於宣告私有成員。私有成員只能在類中可見,不能在類外或派生類中使用。
2. 返回型別 類名::函式名(參數列)
作用域區分符由兩個冒號構成,它用於標識屬於什麼類的成員。
3.成員函式:類的成員函式是實現類的行為屬性的成員。
3.一般將成員函式宣告為函式原型,在類外具體實現成員函式。
●必須在定義了類之後,才可以定義類的物件。
4.下面是乙個簡單的類。
class student //
以class開頭}
};student stud1,stud2; //
定義了兩個
student
類的物件
stud1
和stud2
二、
訪問物件成員
只有公有成員在類體系外可見。
物件成員的訪問形式與訪問結構的形式相同,運算子「.」和「->」用於訪問物件成員。
圓點:物件名.公有成員
指標:物件指標變數名->公有成員
三、
例題題目:寫乙個程式,輸入矩形的長和寬,輸出面積和周長
分析:將長、寬變數和設定長,寬,求面積,以及求周長的三個函式「封裝」在一起,就能形成乙個「矩形類」。
長、寬變數成為該「矩形類」的「成員變數
」,三個函式成為該類的「
成員函式」。
**實現:class jvxing
int zc()
void init( int w_,int h_ )
}; //
必須有分號
intmain( )
注
1.
在類的定義中不能對資料成員進行初始化。
2.
類的任何成員都必須指定訪問屬性,一般將資料成員定義為私有成員或保護成員,將成員函式定義為公有成員。
3.
類中的資料成員可以是c++
語法規定的任意資料型別。
4.
類的成員可以是其他類的物件,稱為類的組合。但不能以類自身的物件作為本類的成員。
5.
類定義必須以分號「
;」結束
6.class與struct的不同:
(1)class中,成員預設情況是private。
(2)struct中,成員預設情況是public。
三、內聯函式
1.內聯函式作用
減少頻繁呼叫小子程式的執行的時間開銷
2. 內聯函式機制
編譯器在編譯時,將內聯函式的呼叫以相應**代替
3. 內聯函式宣告
inline 函式原型
注:內聯函式僅在函式原型作一次宣告。
適用於只有1 ~ 5行的小函式
不能含有複雜結構控制語句 ,不能遞迴呼叫
例如:classcoord
int getx()
int gety()
private:
int x,y;
四、 建構函式與析構函式
建構函式名與類名相同。建構函式可以有任意型別的引數,但不能有返回型別,建構函式在建立類物件時自動呼叫。
析構函式名是在類名之前冠以乙個波浪號「~」。析構函式沒有引數,也沒有返回型別。
原型:類名::類名(參數列);
類名::~類名()
五、 帶引數的建構函式
帶引數的建構函式可以在建立乙個物件時,用指定的資料初始化物件的資料成員。(必須用引數初始化)
六、 過載建構函式
函式名相同,但是引數不同(型別不同或者個數不同)的一組函式。
七、 複製建構函式
特點:1.複製建構函式名與類名相同,並且也沒有返回值型別。
2.複製建構函式可寫在類中,也可以寫在類外。
3.複製建構函式要求有乙個類型別的引用引數。
4.如果沒有顯式定義複製建構函式,系統自動生成乙個預設形式的複製建構函式。
淺複製:
利用系統自帶的複製函式,只能用於資料成員是簡單資料成員時,不需要自己重新寫複製建構函式。例如:
1. #include
2. 3.usingnamespace
std;
4. 5.class
box 6.
7. ; 22.
23.
box::box(int
h,int
w,int
l):length(l),width(w),height(h)
24.
25.int
box::volume
() 26.
27.
32.
33.int
main()
34.
35.
深複製:
當資料成員資源是由指標指示的堆,系統複製物件時只進行(位址值)複製,而不會重新分配記憶體。這樣程式執行時會產生物件操作異常:另外,當物件作用域結束後,又會錯誤地重複釋放堆。所以,這種情況下,需要我們自己寫複製建構函式。
格式:類名::(const 類名 & 引用名,…);
八、 類的其他成員
類定義中除了一般指定訪問許可權的成員,還可以定義各種特殊用途的成員。
1.常成員
2.靜態成員
3.友元
(一)常成員
//常資料成員是指資料成員在例項化被初始化後,其值不能改變。
//在類的成員函式說明後面可以加const關鍵字,則該成員函式成為常量成員函式
//使用const說明的資料成員稱為常資料成員。
//如果在乙個類中說明了常資料成員,那麼建構函式就只能通過初始化列表對該資料成員進行初始化,而任何其他函式都不能對該成員賦值。
(二)常物件
//如果在說明物件時用const修飾,則被說明的物件為常物件。
//常物件的說明形式如下:
類名 const 物件名[(參數列)];
或者const 類名 物件名[(參數列)];
//在定義常物件時必須進行初始化,而且不能被更新。
說明:(1)c++不允許直接或間接更改常物件的資料成員。
(2)c++規定常物件只能呼叫它的常成員函式、靜態成員函式、建構函式(具有公有訪問許可權)。
(三)常成員函式
//在類中使用關鍵字const說明的函式為常成員函式,常成員函式的說明格式如下:
型別說明符 函式名(參數列) const;
const是函式型別的乙個組成部分,因此在函式的實現部分也要帶關鍵字const。
常成員函式不能更新物件的資料,也不能呼叫非const修飾的成員函式(靜態成員函式、建構函式除外)
2.靜態成員
//類成員冠以static宣告時,稱為靜態成員。
//靜態資料成員為同類物件共享。
//靜態成員函式與靜態資料成員協同操作。
//靜態成員不屬於某乙個單獨的物件,而是為類的所有物件所共有。
//靜態成員函式的作用不是為了物件之間的溝通,而是為了能處理靜態資料成員: 保證在不依賴於某個物件的情況下,訪問靜態資料成員
//公有訪問許可權的靜態成員,可以通過下面的形式進行訪問:
類名::靜態成員的名字
物件名.靜態成員名字
物件指標->靜態成員的名字
在靜態成員函式內部,直接訪問。
#include
using namespace std ;
class counter
void shownum() ;
void a:: memberfun( int x )
;(二) 友元類
若f類是a類的友元類,則f類的所有成員函式都是a類的友元函式。在程式中,友元類通常設計為一種對資料操作或類之間傳遞資訊的輔助類。
九、 類的包含
//類的包含是程式設計中一種軟體重用技術。即定義乙個新的類時,通過編譯器把另乙個類 「抄」進來。
//當乙個類中含有已經定義的類型別成員,帶引數的建構函式對資料成員初始化,須使用初始化語法形式。
建構函式 ( 形參表 ) : 物件成員1(形參表 ) , …, 物件成員n (形參表 ) ;
十、 心得
類與物件算是首次接觸c++吧,感覺和c語言完全不同,由習慣的語言一下轉到乙個全新的語言模式很不適應,學起來也特別困難。雖然一直在說就是乙個框架,乙個套路。但是這個套路還是掌握不好。在我看來類與物件最重要的就是定義類這方面。
而且我們在除錯程式時需要一步一步的來,每定義乙個就寫乙個主函式,過了就注釋掉。繼續寫下乙個定義。這樣可以在第一時間找出**中的錯誤並修改,不會等到最後面對一百甚至幾百個錯誤**。
寫程式時我們也需要先分析,這個程式我們需要什麼,需要完成什麼功能,列出乙個大體的提綱。然後按照這個提綱一點一點的定義。這樣會省很大的功夫,避免了重複或遺漏功能。
類與物件學習總結
一 1.類的定義 1 類是對具有相同屬性和行為的一組物件的抽象與統一描述。是使用者自定義的資料型別 2 類的定義包括行為和屬性兩個部分。3 屬性以資料表示,行為通過函式實現。2.c 類定義的格式 class 類名 各成員函式的實現 3.注意事項 1 類的成員可以是其他類的物件,但不能以類自身的物件作...
類與物件學習總結
在大一上學期,我學習了些簡單的c語言程式,不過當時只是根據看到的題目寫出演算法來解決問題。新學期學習了類與物件之後,對程式有了新的體會。在學習類與物件時,了解了寫程式的兩種方法,一是面向過程。二是物件導向。其中面向過程我認為就是直接通過主函式或者借用其他函式,在主函式中直接寫演算法的程式。比如 he...
類與物件學習總結
終於接觸到正式的c 內容了 類與物件。程式設計習慣 1 函式單一原則即乙個函式實現乙個功能 2 建構函式必須至少是兩個乙個帶參乙個不帶參,get set函式必須寫,其次寫功能函式 3 定義類的物件名首字母大寫,變數小寫,常量全大寫。除錯技巧 類每增加乙個成員函式都要在主函式中進行測試,每增加乙個功能...