類
25、物件導向的程式特點:抽象、封裝、繼承、多型。物件是類的例項。
抽象是對同一類物件的共同屬性和行為進行概括,形成類。
資料抽象:類的屬性或狀態;
**抽象:類的行為或功能。
繼承:在已有類的基礎上,進行擴充套件形成新的類。
多型:同一名稱,不同的功能實現方式。減少程式中識別符號的個數。
26、類中如果沒有public等關鍵字修飾,則是private。類中定義函式體是內聯函式,必須簡單。類的建構函式就是初始化類成員的作用。即使類中沒有定義建構函式,定義物件時也會呼叫編譯器自動生成的預設建構函式,此時建構函式的引數列表為空,不為資料成員賦值,如果類內定義了資料成員的初始值,則用初始值,否則按基本資料型別生成的初始值,這是不確定的。如果定義了建構函式,還想用編譯器的預設建構函式,則假如類名是clock ,建構函式clock()=default.這樣就可以呼叫了。
26、委託建構函式的意思是同乙個類中有多個建構函式,只定義其中乙個,其他的呼叫這個定義的。這樣以後改乙個就可以改許多。
複製建構函式:用乙個類物件初始另乙個類物件時呼叫複製建構函式,如果不定義編譯器自定義乙個。形式類名
類中如果有兩個函式與類同名,則可能是建構函式和複製建構函式。
析構函式用來處理物件消除時的善後工作,如果不定義,編譯器產生乙個,其函式體為空。這是為了滿足語法需求。析構函式沒有參數列,沒有return語句。
29、類a中用類b,類b中用到類a,可以用前向引用宣告。
classb;
//前向引用宣告
class
aclass
b
但是前向引用宣告只能幫助在類a中,宣告被用的類b是個類,但並不能具體說明b 是什麼樣子,所以不能物件化b。比如:
classb;
class
aclass
b
這種方法不對,因為還不知道b佔多少位元組。
31、c++中結構體與類的唯一區別:類預設的訪問許可權是private,結構體預設的訪問許可權是public.結構體是特殊的類,當定義主要用來儲存資料,而沒有什麼函式,用結構體。
結構體在c++中用的不多。
c語言中的結構體不能定義函式,只能定義資料,c++中可以定義資料和函式。
32、聯合體union中包含的資料共用乙個資料空間,但同一時刻只有乙個資料有效。union所佔位元組數與資料中最大位元組數相同。
33、列舉enum和列舉類是不同的,兩個列舉類可以有相同的列舉值,但兩個普通的列舉不能有相同的列舉值。
28、類的組合,即類中的私有成員也是類的物件。
29、析構函式可以釋放記憶體。
類的繼承
1、即可以用組合,又可以用繼承時,選擇組合,因為組合的語法簡單。
2、繼承和派生是同一過程從不同的角度看。
保持已有類的特性而構造新類的過程是繼承,強調保持原有特性,盡量用原有的類。
在已有類的基礎上新增自己的特性而產生新類的過程是派生,強調產生新的。
3、派生類的構成:吸收基類成員;改造基類成員;新增新的成員。
4、派生類包含了全部基類中除了構造和析構函式之外的所有成員。
c++11規定可以用using 語句繼承基類建構函式。
改造:派生類宣告裡乙個和基類成員同名的新成員,派生的新成員隱藏或覆蓋裡外層同名成員。
5、不同繼承方式影響派生類成員對基類成員的訪問許可權;派生類物件對基類成員的訪問許可權。
多型
2、虛函式用virtual修飾。
告訴編譯器,這個函式先不做靜態繫結,而是後面執行要做動態繫結。用於繼承時用。虛函式屬於物件,而不屬於整個類。
#include
#include
using
namespace std;
classa;
void a::
show()
classb:
public a
;void b::
show()
void
fun(a *p)
intmain
(int argc,
char
**ar**)
//輸出:a_show() b_show()
含有純虛函式的類稱為抽象類,它不能生成物件。例如,動物作為乙個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理。純虛函式最顯著的特徵是:它們必須在繼承類中重新宣告函式(不要後面的=0,否則該派生類也不能例項化),而且它們在抽象類中往往沒有定義。定義純虛函式的目的在於,使派生類僅僅只是繼承函式的介面。
共享與保護
35、
int i;
main()
不可見,全域性作用域
}
36、類的靜態變數用static修飾,屬於整個類,而並不屬於該類的物件。
class
point
}int point :: count=0;
//靜態資料成員的初始化和定義在類的外面。
靜態資料一般用靜態函式處理。
靜態函式:static 返回值 函式名(){}.
非靜態函式是利用物件去呼叫它,物件.函式名的方式,所以非靜態函式知道是哪個物件呼叫了它,能夠處理那個物件的成員變數。
靜態函式一般不處理類的非靜態成員,如果一定要處理,要通過物件訪問,這樣才能知道是哪個物件的成員,把物件當作引數傳給它。
class
point
point
(point &p)
~point()
intgetx()
intgety()
static
void
showcount()
private
:int x,y;
static
int count;
}int
main()
37、友元是c++提供的一種破壞資料封裝和資料隱藏的機制;
通過將乙個模組宣告為另乙個模組的友元,乙個模組能夠引用到另乙個模組中本是被隱藏的資訊;
增加靈活性;
為確保資料的完整性,及資料封裝與隱藏,慎用友元。
class
point
friend
float
dist
(point &a, point &b)
;//將類外的函式宣告為該類的友元,函式可以訪問類中的私有成員。傳引用成本低
private
:int x,y;};
float
dist
(point &a,point &b)
intmain()
class
aprivate
:int x;};
classb;
void b::
set(
int i)
void b::
display()
友元關係是單向的,a是b的友元,b不一定是a的友元。
39、靜態生存期與程式的執行期間相同,在函式內部宣告靜態生存期物件用static修飾,值不改變,除非賦新值。
動態生存期起始與宣告點,結束作用域結束。沒有用static宣告的物件。
模板
1、多個過載函式冗餘,或者修改乙個,其他不改,演算法不一致。
2、函式模板的模板引數列表內容可以包含類class,但涉及物件之間的相關運算時,需要過載運算子。
3、群體
1、多個資料元素組成的集合體。群體可以分為線性群體和非線性群體。線性群體中的元素按位置排序,非線性群體不用位置順序標識元素。
陣列
蓋茨清華大學演講
尊敬的顧校長,清華大學的老師 同學們 獲得清華大學這所世界一流大學的榮譽博士學位,讓我感到非常榮幸。清華是所有著百年歷史的名校,這裡誕生了很多傑出的科學家 商業和政治領袖。我上一次造訪貴校是在1997年。當時,貴校學生的才華 熱情和創造性給我留下了很深的印象。之後,我決定在中國設立微軟研究院。在沈向...
清華大學 自學能力
一 永遠不要說你已經盡力了 我在高中時體育特別差,跑1000公尺都很要命,從來都是不及格。到了清華之後,第一節體育課,老師告訴我們每年要測3000公尺長跑,跑不過不許畢業,取消推研資格。怎麼辦?於是每天晚上10 30,我們的自習教室關門,操場上的人就多起來了。跑半個小時再回寢室繼續學習,練了乙個學期...
查詢學生資訊 清華大學
牛客網題目鏈結 排序題。先儲存再查詢 include include include include include include include include include include using namespace std const int n 1005 typedef pair i...