隱藏和虛函數(shù)
沒加virtual前, Shape、Circle、Rect的double calcArea()函數(shù)同名,且參數(shù)相同,為什么Shape *shape1 = new Circle(4.0);執(zhí)行后調(diào)用的是Shape中的calcArea()呢?為什么子類的同名函數(shù)沒有隱藏掉父類的函數(shù)呢?
沒加virtual前, Shape、Circle、Rect的double calcArea()函數(shù)同名,且參數(shù)相同,為什么Shape *shape1 = new Circle(4.0);執(zhí)行后調(diào)用的是Shape中的calcArea()呢?為什么子類的同名函數(shù)沒有隱藏掉父類的函數(shù)呢?
2016-09-12
舉報(bào)
2017-10-04
?繼承中:使用指向?qū)ο蟮闹羔樤L問類成員時(shí)與使用對(duì)象直接訪問類成員的訪問權(quán)限和成員隱藏情況是不一樣的。?
???????··使用對(duì)象直接訪問成員時(shí),繼承來的子父類成員都可以訪問;子父類中有同名成員時(shí),子類一定覆蓋父類。··?
???????··使用指向子類的父類指針時(shí),只可直接訪問的是父類成員,基類成員函數(shù)前加virtual且子類中有同名函數(shù)時(shí)才會(huì)使用子類的該成員函數(shù)。
2016-09-12
因?yàn)槟愣x的是Shape類型的指針,Shape類里面的函數(shù)不虛,就被調(diào)用了。
Shape中的函數(shù)被定義成虛函數(shù)才能生成虛函數(shù)列表指向子類的虛函數(shù)。