關於c++中繼承和虛函數的一些思考

做爲一個這麼多年的老程序員,有時候是應該反思一下自已,好多基礎的東西都丟掉了.
今天有時間再複習一下,溫故而知新嘛.
致每個在路上的人,努力不放棄.
上代碼:

#include <stdio.h>

class CA {
public:
        virtual void vfunc1() {
                printf("CA:vfunc1()\n");
        }

        virtual void vfunc2() {
                printf("CA:vfunc2()\n");
        }

        void func1() {
                printf("CA:func1()\n");
        }

        void func2() {
                printf("CA:func2()\n");
        }

protected:
        virtual void vprot1() {
                printf("CA:vprot1()\n");
        }
};

class CB : public CA {
public:
        virtual void vfunc2() {
                printf("CB:vfunc2()\n");
        }

        void prot2() {
                CA::vprot1();
        }
};

class CC : public CB {
public:
        virtual void vfunc2() {
                printf("CC:vfunc2()\n");
        }
};

int main() {
        printf("Hello Wrold!\n");
        CA a;
        a.vfunc1();

        CB b;
        b.vfunc1();
        b.vfunc2();
        b.prot2();

        CC c;
        c.vfunc1();
        c.vfunc2();
}

輸出:

CA:vfunc1()–>>父類A調用自已的public vfunc1()
CA:vfunc1()–>>子類B調用父類A的public vfunc1()
CB:vfunc2()–>>子類B調用自已的public vfunc2()
CA:vprot1()–>>子類B調用父類A的protected vprot1()
CA:vfunc1()–>>子類C調用父類A的public vfunc1()
CC:vfunc2()–>>子類C調用自己的public vfunc2()

總結:
1.子類可以調用父類的public接口
2.子類可以在函數中調用父類的protected接口, 但不能在對象中直接調用.
3.孫子類可以調用爺類的public接口,可以調用父類的public接口.

參考:
C++虛函數表剖析
http://blog.csdn.net/lihao21/article/details/50688337

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