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