[問題] virtual函式問題

看板C_and_CPP作者 (cc)時間14年前 (2011/11/03 06:18), 編輯推噓3(307)
留言10則, 7人參與, 最新討論串1/1
C++的virtual函式問題 class A{ public: virtual void foo() {cout << "A::foo" << endl;} }; class B: public A{ public: void foo() {cout << "B::foo" << endl;} }; class C: public B{ public: void foo() {cout << "C::foo" << endl;} }; int main(void){ C c; B *q; q = &c; q->foo(); return 0; } 我想問的是為什麼 q->foo()的結果是C::foo B::foo()不是virtual不是應該用B*去指就呼叫B::foo()嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 98.208.56.49 ※ 編輯: seedman 來自: 98.208.56.49 (11/03 06:20)

11/03 08:41, , 1F
A是,後面就自動都是
11/03 08:41, 1F

11/03 10:40, , 2F
Polymorphism http://ppt.cc/Mkj,
11/03 10:40, 2F

11/03 11:48, , 3F
原來A是後面就不用再加了 @@
11/03 11:48, 3F

11/03 12:45, , 4F
virtual 只要一呼叫就會世世代代傳下去 就像爽哥那樣
11/03 12:45, 4F

11/03 12:46, , 5F
所以說這會造成誤解 一般來說 B C中的foo 最好也加上
11/03 12:46, 5F

11/03 12:46, , 6F
virtual這個keyword
11/03 12:46, 6F

11/03 16:24, , 7F
一般來說用virtual Destructor在A就好.每個都用程式很肥
11/03 16:24, 7F

11/03 16:57, , 8F
virtual dtor 在哪裡取決於你會對何種型別的指標作delete
11/03 16:57, 8F

11/03 17:07, , 9F
可是我記得.這樣弄以後. 也有達到同樣功能.
11/03 17:07, 9F

11/03 18:31, , 10F
virtual dtor與其它member function是否為virtual無關
11/03 18:31, 10F
文章代碼(AID): #1EiS6wtO (C_and_CPP)