- C++三大特點
a.封裝:封裝一方面可以實現代碼的模塊化,容易實現代碼的複用,另一方面可以對代碼功能部分隱藏起來,只提供一個藉口給調用者。數據只可以通過特定的類或對象函數進行訪問。
b.繼承:繼承可以實現現有類的所有功能並在無需重新編寫原來的類的情況下對這些功能進行擴展。其繼承的過程就是一般到特殊的過程。通過繼承創建的新類叫“子類”或“派生類”,被繼承的類叫“父類”或“基類”。要實現繼承可以通過“繼承”(Inheritance)和“組合”(Composition)來實現,在某些oop語言中,一個子類可以繼承多個基類。但是一般情況下,一個子類只能有一個基類,要實現多重繼承,可以通過多級繼承來實現。
c.多態:多態性(polymorphisn)是允許你將父對象設置成爲和一個或更多的他的子對象相等的技術,賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。簡單的說就是:允許將子類類型的指針賦值給父類類型的指針。
2. 繼承實現方式:
a.實現繼承:指使用基類的屬性和方法而無需額外編碼的能力;
b.接口繼承:指僅使用屬性和方法的名稱、但是子類必需提供實現的能力;
c.可視繼承:指子窗體(類)使用基窗體(類)的外觀和實現代碼的能力;
3. 構造函數:
名字和類名相同,沒有返回值,也不需要顯示調用,在創建對象的時候自動執行,專門用來初始化對象的;
4. 訪問權限:
在類的內部,public,private,protected的數據或函數都可以互相訪問,沒有限制,在類的外部,只能通過對象訪問public成員,不能訪問private和protected成員;可以通過類的public成員函數訪問private數據;
5. 析構函數:
創造對象是用構造函數初始化,退出時用析構函數來退出,進行清理工作從而釋放分配的內存,關閉打開的文件。Demo()---構造函數,~Demo()---析構函數;構造函數可以重載,西溝函數不能重載,只能有一個,析構函數沒有參數。先構造的後析構;
6. const:
a.在C++中和#define的作用差不多,在C中修飾的變量不允許改變,但是可以通過指針修改該單元,輸出的時候是修改單元內容;在C++中,雖然通過指針修改,但是輸出任然是原來的內容,輸出不到內存取值;
b.C++中const的變量只能在本文件中可用,別的文件報錯,而C中沒有這種限制;
7. static:
a.修飾局部變量:靜態局部變量,執行完釋放,只初始化一次;
b.修飾全局變量:只能在本文件中使用;
c.修飾函數:只能在本文件使用;
8. this指針:
指向當前對象,通過它訪問當前對象的所有成員。當前對象就是正在使用的對象,在類的內部使用,可以訪問所有的成員,public、private、protect。this只能在非靜態成員函數內部使用,在其他地方非法;this只能在對象創建以後才能使用;
9. static成員變量
static變量屬於類但是只能在類外初始化;static變量是幾個對象共享使用,相當於全局變量;
類外的初始化格式:
int Student::m_total = 0;
類型 類名::static變量 = 數值;
static成員的訪問形式:
a.類名::static變量:Student::m_total;
b.對象(static變量):stu.m_total;
c.對象指針->(static成員變量):pstr->m_total;
10. static函數:
沒有this指針,只能訪問static成員;
static函數聲明時加static,定義是時候不加;
11. const成員函數:
可以使用所有的成員,但是不能改變值,聲明和定義函數時都要加const;
const對象只能調用類的const成員;
12. 友元函數friend:
在類外定義的,不屬於當前類的函數。可以在當前類中聲明,前面加friend,構成友元函數;
class Address
{
public:
friend class Student;
}
友元函數可以訪問當前類的private成員;
友元函數不能直接訪問類的成員,必需藉助對象;‘
友元函數關係是單向的,不是雙向的;
友元關係不能傳遞:B是A 的友元,C是B的友元,C和A之間不是友元關係;
13. String類:
a.包含頭文件<string>
string s1; 定義的時候沒有初始化,默認是空;
string s2 = "c plus"; 定義並初始化c plus,沒有'\0';
string s3 = s2;定義s3,並把s2賦值給s3;
string s4(3,'s'); 初始化爲3個s;
string輸入時,cin是遇到空格默認結束;
string成員可以用下標訪問;從0開始;
b.string中字符串可以使用+,+=進行字符串的拼接;
c.string插入操作,insert
原形:string&insert(size_t pos,const string &str);
d.string刪除操作:erase:
原形:string&erase(size_t pos = 0,size_t lenth)
s2.erase (5);把s2後第五個元素後面的內容全部刪除;
s3.erase(5,3);s3中第五個元素後3個元素刪除;
e.string中substr
string substr(size_t pos = 0,size_t len = npos) const;
pos爲要提取的子字符串的起始下標,len爲要提取的字符串的長度。
s2 = s1.substr(3,10);從第3個開始提取10各元素給s2;
f.string查找find查找出現的位置:
其中兩個原形:
size_t find(const string&str,size_t pos = 0)const;
size_t find(const char* s,size_t pos = 0)const;
14. 繼承的方式:
a.public繼承:
基類中public成員在派生類中還是public屬性:
基類中protected成員在派生類中是protected屬性;
基類 private在派生類中不能使用;
b.protected繼承:
基類public成員在派生類中爲protected屬性;
基類protected成員在派生類中爲protected屬性;
基類private在派生類中不能使用;
c.private繼承:
基類中public成員在派生類中爲private屬性;
基類中protected成員在派生類中爲private屬性;
基類的private在派生類中不能使用;
在派生類中訪問基類的private成員的唯一方法是藉助基類的非private成員函數,如果沒有這樣的成員函數接口則無法訪問;
15. 改變訪問權限using:
使用using改變基類成員在派生類中的訪問權限;
如:public在成private,
存在問題:在派生類中無法訪問基類中private成員,如果用using修改,編譯的時候報錯;
借鑑:https://blog.csdn.net/perfectguyipeng/article/details/73694848