當你看到標題,有興趣打開本文,那我推測,你應該是准備考“二級C++等級考試”。如果我猜對了,希望在下文對你的考試有所幫助;如果我猜錯了,你不妨也用短暫的時間看看,這在編程實踐中也是需要注意的,你就當復習、加深,找共鳴吧。
(一)構造函數——從最易遇到的問題說起
(1)構造函數的初始化列表
1)構造函數:Point(float a,float b){x=a;y=b;} ①
2)用初始化列表改寫:Point(float a,float b): y(b), x(a){} ②
1.1 上面是同一個構造函數的兩種寫法。其中x、y是提前定義好的變量,a、b是構造函數的參數。
1.2 由①②推廣出Point(float a,float b): y(b){x=a;} 成立 ③
1.3 {}是構造函數體。
1.4 :後面的y(b),x(a)就是所謂的初始化列表。此處有個考點,在構造函數體中,已經初始化的成員,在初始化列表中不可重復初始化;反過來說,在構造函數體中沒有初始化的成員,必須在初始化列表中寫出,並特別注意在初始化列表前需用“:”冒號做分隔和標示。
特注:當x或y是被定義為常數據時,常數據只能用初始化列表進行初始化(②或③的形式)
class Point
{
private:
float x;
const float y;
public:
Point(float a,float b): y(b), x(a){} ’或Point(float a,float b): y(b){x=a;}
’不可錯寫成Point(float a,float b){x=a;y=b}
}
(2)繼承關系下的構造函數的寫法
class Person
{
private:
char name;
int age;
public:
Person(char a,int b):name(a),age(b){}
}
class Student : public Person
{
float score; //默認為(Private)私有成員
public:
Student(char x,int y,float z):Person(x,y),score(z){}
}
大家對比不難發現,這裡的特點是:
(1)派生類(子類)Student的初始化列表中[Person(x,y),score(z)],按照基類的構造函數,將對應參數直接帶給基類中。
(2)再對派生類中新派生的成員逐一初始化,當然,新派生的成員的初始化可以再構造函數體“{}”中,也可以再初始化列表(“:”之後)中。
(二)繼承——易記不易懂(不好理清)
(1)繼承的定義
定義:子類從父類那裡繼承有用的數據成員和成員函數。
(2)繼承的分類
單繼承和多繼承
單繼承:只有一個直接父類,例class A : public B,讀作“類A公有繼承於類B(A為子類,B為父類)”。
多繼承:有兩個及以上多個直接父類,例class A:public B,public C,讀作“類A公有繼承與類B同時公有繼承於類C”(第二個public可省略不寫)。
(3)類成員訪問權限
類成員有三種訪問權限:public(公有的)、private(私有的)、protected(保護的)
class Example
{
private:
? //這裡的成員只能使用於本類,不能被派生類訪問,本類的對象也不能直接訪問
protected:
? //這裡的成員可以被本類和派生類直接訪問,但本類的對象不能直接訪問
public:
? //這裡的成員既可以被本類和派生類直接訪問,也可以被本類的對象直接訪問
};
表 派生模式對繼承成員訪問權限的影響
注:類的對成員的訪問,就是拿來就用,為了避免成員明的沖突,可以使用作用域限制符“: :”。
這裡需要切記一句話:任何類的對象,只能訪問該類的公有成員。
【對這句話的辯證理解是:類實例化(new)的對象,不能直接訪問私有成員(private)和保護成員(protected),而對象對這些成員的使用是通過公有成員函數在類體中操作的。也就是說,如果類裡面的非公有成員通過現有的公有成員函數沒法使用,這時,只能通過修改類裡面的內容,重新建立調用機制來使用。成員包括數據成員(我們常在類中定義的變量或常變量)和成員函數;如果子類與父類是公有繼承的關系,那麼父類的公有成員同時也是子類的公有成員。】
整理一下“訪問”的問題:
成員訪問1)采用:對象名稱.成員名稱 或 引用名.成員名稱 或 指針—>成員名稱。
2)類訪問成員:直接使用“數據成員變量名稱”、“成員函數名稱”進行調用。
(三)推薦和共享
一本好書,能得到適當的點撥,能把簡單的事情簡單化(相對於有的書是,簡單的事情復雜化,弄得讀者一頭霧水,最後結論是這個知識真難),帶領讀者理解自然流暢地獲取知識。再次,推薦一本書《C/C++程序設計實用教程》王大倫,清華大學出版社 2006.
C++是對C的擴展,可以算是一個增強版。本書更多說的是C++,因為,說了C++就包括了C在內,至於不同的地方,有簡單的對比提示,而且不同點實際是很少的。本書不管是用於應試還是當著對這兩門語言的基礎進行加深,都是挺不錯的,因為,其中的知識點規整、明晰,舉例也是很干練的,相當具有代表性。本文中的例子就來自於本書。