1. 程式人生 > >3.C++語言知識點總結

3.C++語言知識點總結

1.封裝:將記錄包起來讓其自己去幹。

2.抽象:記錄一下這些傢伙的屬性,比如都是人。

3.繼承:生下來的兒子跟父親一個鳥樣。

4.多型:兒子除了含有父親的內容外,還有自己的特徵。

5.標頭檔案中不加“.h”。

6.加上名稱空間 using namespace std; //後期考慮到C++主要用在大型程式設計,可以不加,但是一些呼叫的型別要用std::xxoo的形式。

7.cin>>i;輸入(面板輸入到i)   cout<<xxoo<<endl;輸出  ;

   cin.peek()的返回值是一個char型的字元,其返回值是指標指向的當前字元,但它只是觀測指標停留在當前位置並不後移;

   cin.get()用來從指定的輸入流中提取一個字元(包括空白字元);

   #include<iostream>      using namespace std;      int main(){          int sum=0;          int c;          while(cin>>c){              sum+=c;              while(cin.peek()==' '){    //遮蔽空格 //探測並不移除              cin.get();//獲得並移除           }         if(cin.peek()=='\n'){              break;           }       }     cout<<sum<<endl;        return 0;     }    執行結果:    11 11 22     11    55

8.ungetc(ch,stdin);//將變數ch中存放的字元退回給stdin輸入流(其中ch=getchar();面板輸入的字元被ch賦予,為了使其重新回到面板中可以使用該句)

9.建構函式:物件可以使用的函式。比如:in.open()

10.可以加std::cin.ignore(100,‘\n’);std::cin.get();//暫停結束,直到任意輸入一字元再結束(這裡的ignore()表示忽略100個字元,除非是\n就不忽略)

11.函式過載:將函式的作用重新定義

12.區域性變數需要初始化為0

13.在string str;時,由於cin>>str會由於遇到空格便結束,所以要改為getline(cin,str);//表示用cin的方式輸入一串東西給str

14."&"表示獲得變數的地址

15.用‘ ’括起來的表示為單個字元

16.int *p1=&myInt,這裡表示的指標是存地址

          *p1=233;這裡表示的是解引用,給地址在p1中的記憶體位置賦值233

17.如果函式形式為swap(int *p,int*q),傳入的引數應該為地址swap(&p,&q)

     形式為swap(int &p,int &q)時,直接傳入引數就行,即為swap(p,q)

18.用typedef來為一個型別定義建立一個別名:typedef int* intPointer,意思就是說,intPointer=int*

19.類 class Myfirstclass

          {

             };//要求類名的第一個字母採用大寫,同時在類宣告末尾必須有一個分號,類主要由裡面的變數還有函式組成

20.queue(模板類)佇列:需要元素型別

     eg:queue<int> q1;//表示q1是一個佇列

     queue的基本操作:

     入隊:q.push(x);將x接到佇列的末端

     出隊:q.pop();彈出佇列的第一個元素,並不會返回其值

     訪問隊首元素:q.front();即最早被壓入佇列的元素

     訪問隊尾元素:q.back();即最後被壓入佇列的元素

     判斷佇列空:q.empty();當佇列空時,返回true

     訪問佇列中元素的個數:q.size();

21.構造器

     class Car

      {

       Car(void);//建構函式名字與類名一樣

        };

      Car::Car(void){

         }//定義建構函式內容

22.析構器

     class Car

      {

      Car(void);

       ~Car();//解構函式,避免記憶體洩漏,可在解構函式中加內容    Car::~Car()

                                                                                                         {

                                                                                                             }

23.繼承:

     class Animal

      {

        public:

                   std::string mouth;

                   void eat();

        };

     class pig:public Animal

      {

        void sleep();

       };//繼承父類的所有內容,並可以擁有自己的內容

      void Animal::eat()

       {

         }//對函式內容進行填充

24. public:允許任何程式碼訪問

      protected:允許這個類本身還有它的子類訪問

      private:允許這個類本身訪問

25.在類裡面加 friend class xxoo,表示另一個類xxoo可以呼叫這個類裡面的東西

26.直接建立一個指標並讓它指向新分配的記憶體塊

     int *pointer=new int;

          *pointer=110;//將記憶體塊存進去內容

     std::cout<<*pointer;

           delete pointer;//要求每一個new都是需要一個delete,避免佔用太多死記憶體,導致記憶體洩漏

27.在基類中宣告函式為虛擬函式(在函式前加virtual),這樣在子類中對函式進行過載後,在後期呼叫時,即使用基類型別定義子       類的建構函式如:

                             Parent *child=new Child("xxoo");//建構函式為Child,開闢了一個新記憶體空間放著建構函式,並向建構函式中輸         入引數,但是由於是定義的指標型別是基類的,所以預設的記憶體塊中的同名函式引用的是父類的,沒辦法體現出函式的重             載,所以在基類中將後期要過載的函式變為虛擬函式,這樣就能使得成功呼叫過載函式

28.抽象方法:就使27中的虛擬函式=0,eg:virtual void play()=0;表示該函式沒有內容定義,告訴編輯器不用查詢裡面的內容

29.基類中的解構函式應該寫為虛擬函式,是為了子類中的解構函式能被正確呼叫,然後再呼叫基類中的解構函式,解構函式都是         在main()中所有程式碼執行結束後再呼叫的。

30.在進行多繼承時,為了防止子類的兩個基類中都含有相同的屬性(此時兩個基類可能是從同一個基類中繼承而來得的),在         原基類繼承更高階的基類中應該使用虛繼承:

         class Teacher:virtual public Preson

          {

             };

          class Student:virtual public Person

           {

             };

           class Teachstudent:public Teacher,public Student

            {

              };//可以避免該類中含有兩份Person內的屬性

31.動態陣列:int *x=new int[10];//x地址指向新開闢的整形陣列的頭地址

                       賦值方式為:x[1]=...;x[2]=...;

                       delete[] x;//刪除開闢出來的陣列空間

32.模板定義:

      template<class T>//模板定義某種模糊型別為T

       void swap(T &a,T&b)//模糊型別引用

         {

              T temp=a;

                  a=b;

                  b=temp;

           }

        int main()

         {

           int i1=100;

           int i2=200;

            swap(i1,i2);

            std::string s1="JJJ";

            std::string s2="rrr";

            swap(s1,s2);

            return 0;

           }

33.模板定義後的類進行初始化

        template <class T>

        class Myclass

         {

            Myclass();//建構函式

            void swap(T &a,T &b);//模糊型別引用的成員函式

             };

         Myclass<T>::Myclass()

             {

               }//類模板定義後的建構函式初始化需要加<T>