C++學習第三課

1.構造函數:  名字和類名相同,沒有返回值,也不需要顯式調用,在創建對象的時候自動執行。---專門用來初始化對象的;

2.訪問權限:在類的內部,無論publicprotect,private,都可以互相訪問;沒有限制;

    在類的外部,只能是通過對象訪問public的成員,不能訪問privateprotected成員;通過類的內部public的函數訪問private

    

3. 封裝: 外部對象不能訪問的設置爲private屬性,外部對象可以訪問的可以設置爲public屬性,這個爲封裝。

 

4.  char name[10];

  nanme = "xiaoming"; 這個出錯的;地址常量不能賦值

  改正方法1

char *name;

  nanme = "xiaoming";

  改正方法2

char name[10];

  strcpy(nanme , "xiaoming");   

  

  

5.析構函數

創造對象時用構造函數初始化;

退出的時候用析構函數來退出,進行清理工作;釋放分配的內存,關閉打開的文件。----析構函數

Demo()----構造

~Demo()----析構函數  ;

 

構造函數可以重載;

析構函數只能一個,不能重載,析構沒有參數;

 

 

6.

const

1.c++中和#define的作用差不多

c中修飾的變量不允許改變,但是可以通過指針修改該單元內容,輸出的時候是修改後的內容;

  c++中,雖然通過指針修改,但是輸出仍然是原來的內容,輸出不到內存取值;

2. c++const的變量只能在本文件中可用,別的文件報錯

  c沒有這種限制;

  

7.static

C中:

1.修飾局部變量:靜態局部變量,執行完釋放,初始化一次,

2.修飾全局變量:只能在本文件中使用;

3.修飾函數:只能在本文件使用;

 

8. This指針

指向當前對象,通過它可以訪問當前對象的所有成員。當前對象就是正在使用的對象;

在類的內部使用,可以訪問所有的成員,publicprivateprotect

 

this只能在非靜態成員函數內部使用,在其他地方非法;

this 只能在對象創建以後才能使用;否則非法;

 

 

9. static成員變量

 

static變量屬於類,只能在類外部初始化;static變量是幾個對象共享使用,相當於全局變量;

外部初始化的格式:

 

int Student::m_total = 0;

類型   類名::static變量 = 數值;

 

 

static 成員的訪問形式:

1. 類名::static變量

Student::m_total

2.對象.(static 變量)

 stu.m_total

 3.對象指針->(static成員變量)

  pstr->m_total

  

  

  

  10.static函數

  沒有this指針,只能訪問static成員;聲明加static,定義的時候不加

  

  

  11.const成員函數

  可以使用所有的成員,但是不能改變值;

  聲明和定義函數時都要加const

  

  const對象只能調用類的const成員

  

  

  

  12.友員函數friend

  在類外定義的,不屬於當前類的函數,可以在當前類中聲明,前面加friend,構成友元函數;

  友員函數可以訪問當前類的private成員;

  

  友元函數不能直接訪問類的成員,必須藉助對象。

  

  

  友員的關係是單向的,不是雙向的;

  

  13.友員類

  友元類的聲明:

  class Address{

  public:

   friend class Student;

  };

  

 友員關係是單向的;

 友員關係不能傳遞:BA的友員,CB 友員, CA之間不是友員關係;

 

 

 

 14. string

 a.包含頭文件 <string>

  

  string s1;  定義的時候沒有初始化,默認是空;

  string s2 = "c  plus";   定義並初始化 c plus ,沒有\0;

  string s3 = s2;    定義s3,並把s2賦值給s3

  string  s4  3's'; 初始化爲3s

  

  string 輸入時,cin是遇到空格默認結束;

  

  string成員可以用下標訪問;從0開始;

  

  b.  string 中字符串可以使用++=進行字符串的拼接;

  

  c. string插入操作,insert

  原型:  string& insert(size_t pos, const string &str)

  

  d.string刪除操作:erase

  原型:string& erasesize_t pos = 0size_t length

  s2.erase(5);s25個元素後面的內容全部刪除;

  s3.erase(5, 3);s3中第5個後面3個元素刪除

  

  e .stringsubstr

  string substr (size_t pos = 0, size_t len = npos) const;

  pos 爲要提取的子字符串的起始下標,len 爲要提取的子字符串的長度。

  

  s2 = s1.substr(3, 10);從第3個開始提取10s2

  

  fstring查找find查找出現的位置:

  其中的兩種原型爲:

    size_t find (const string& str, size_t pos = 0) const;

    size_t find (const char* s, size_t pos = 0) const;

 

 

 

15.1繼承

 一個類從另一個類獲取成員變量和成員函數的過程;

 被繼承的類稱爲父類或者基類,繼承的類稱爲子類或者派生類;

 繼承的語法:

 class 派生類的名:[繼承方式]  基類名{

   派生類的成員;

 };

  繼承的方式:  public privateprotect,默認是private

  

  public成員可以通過對象訪問,private只能通過內部函數訪問;

  

  

  protected:也不能通過對象訪問;

  繼承的時候,protected成員可以在派生類中使用,基類的private不能在派生類中使用;

  

  

  繼承的方式:

  1.public繼承:

  基類中public成員在派生類中還是public屬性;

  基類中protect成員在派生類中protected屬性;

   .....private在派生類中不能使用;

   

   2.protected繼承

    基類中public成員在派生類中爲protected屬性;

    .....protected.............protected.....

    .....private在派生類中不能使用;

   3. private繼承

   基類中public成員在派生類中爲private屬性;

   .....protected..............private....;

   .....private在派生類中不能使用;

   

   

   在派生類中訪問基類的private成員的唯一方法就是藉助基類的非private成員函數;

   如果沒有這樣的成員函數則無法訪問;

   

   

   4, 改變訪問權限 using

    使用using改變基類成員在派生類中的訪問權限;

    public改成privateprivate改成public

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章