c++基礎總結篇

來源:互聯網
上載者:User

今天總結一周來的學習。學習的主要內容是c++基礎知識,主要從下面幾個主要的點總結: 模板基類
連結 基類中調用虛函數多態失效了 基類中虛解構函式的重要性
連結 友元函數和類操作符重載
連結 C++類和C語言的關係
給一個連結。

類建構函式初始化列表出現的原因
1.如果我們有一個類成員,它本身是一個類或者是一個結構,而且這個成員它只有一個帶參數的建構函式,沒有預設建構函式。這時要對這個類成員進行初始化,就必須調用這個類成員的帶參數的建構函式,如果沒有初始化列表,那麼他將無法完成第一步,就會報錯。
2、類成員中若有const修飾,必須在對象初始化的時候,給const屬性賦值
當類成員中含有一個const對象時,或者是一個引用時,他們也必須要通過成員初始化列表進行初始化。

函數返回靜態變數引用,可以做左值

示範程式:

#include <stdio.h>int getA1(){        static int a =10 ;        a ++ ;        return a;}int* getA2(){        static int a =20 ;        a++;        return &a;}int& getA3(){        static int a =30;        a ++;        printf("a:%d\n",a);        return a;}int main(){        int cc = getA1();        printf("cc:%d\n",cc);        int*w = getA2();        printf("w:%d\n",*w);        int t = getA3();//a:31        printf("t:%d\n",t);        //getA() = 100;  //左運算元必須為左值         //getA2() = (int*)100; //不能作為左值        *getA2()=100;        printf("*getA2():%d\n",*getA2());        getA3() = 100;        getA3();        return 0;}

運行結果:

cc:11w:21a:31t:31*getA2():101a:32a:101

類模板中的static變數

直接給個例子吧:

#include <iostream>using namespace std;template<typename T>class AA{public:        AA()        {                a++;        }        static T a;        void printA()        {                cout<<"a:"<<a<<endl;        }};template<typename T>T AA<T>::a = 0;int main(){        AA<int> aa1;        aa1.printA();        AA<int> aa2;        aa2.printA();        AA<int> aa3;        aa3.printA();        AA<char> bb1;        bb1.a = 'a';        bb1.printA();        AA<char> bb2;        bb2.printA();        AA<char> bb3;        bb3.printA();        return 0;}

輸出結果為:

a:1a:2a:3a:aa:ba:c

再給一個人家畫的圖:

不明白的話,自己再找csdn大牛寫的文章,這裡只做拋磚引玉了。
12. 抽象類別,你的痛。。。
抽象類別是含有純虛方法的類。記住了:只要類中出現純虛方法(例如:virtual void func()=0;就是一個純虛函數),那麼這個類就是抽象類別。抽象類別雖然有很多禁忌,但歸根結底就是抽象類別不能建立對象。為了充分瞭解這個抽象類別,舉幾個抽象類別的禁忌:

#include <stdio.h>class B{public:        virtual void print()=0;        virtual void func()=0;        B(){}        B(int a, int b=0){printf("%d:%d\n",a,b);}};int main(){        //B b;//抽象類別不能建立對象        B *p; //抽象類別可以使用指標        //抽象類別不能作為函數傳回值和函數參數        //B fun1();        //void fun2(B);        B& fun3(B&);//抽象類別引用可以作為函數參數和函數傳回值}

為什麼會出現抽象類別不能作為函數參數和函數傳回值的問題。抽象類別引用卻可以呢。我的理解是抽象類別在做函數參數和函數傳回值時,會產生隱式的賦值或是建立抽象類別對象。因為,抽象類別不能執行個體化,那麼抽象類別作為函數參數和函數傳回值的時候就會出錯了。為什麼引用可以呢。我的解釋是引用實際上就是一個地址,地址不會有抽象類別的初始化產生的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.