[問題] static與class的繼承

看板C_and_CPP作者 (楊伯)時間15年前 (2010/03/16 22:32), 編輯推噓4(4011)
留言15則, 3人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 我想讓class中的某一個member在各個Instance中共用同一個 所以我在宣告member的時候加上了static,這樣子做確實可以 讓我達到目地,不過問題就出在這個class是一個基底類別,他 必須要被多個class所繼承,而每個子類別中都各自要有一個跟 父類別一樣功能的member,我在實做的時候發現他們繼承之後依 舊都是指向基底類別的static member 後來上網查了一下得知要 在子類別中重新宣告一次同樣的member,雖然可行,不過卻要用 不同的指標去new,可是我想要的結果是像下面的code那樣,而不 是被註解的那行的做法。 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) VC++ 2008 有問題的code: (請善用置底文標色功能) class A { public: static int aa; }; class B : public A { public: static int aa; }; int A::aa = 10; int _tmain(int argc, _TCHAR* argv[]) { A* a = new A(); A* b = new B(); //B* b = new B(); a->aa = 20; b->aa = 30; printf("A=%d\n",a->aa); printf("B=%d\n",b->aa); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.128.56

03/16 22:48, , 1F
你這樣沒意義阿 你有多寫一個 這樣是兩個aa 耶
03/16 22:48, 1F

03/16 22:48, , 2F
Q大是說B class會有兩個aa嗎?
03/16 22:48, 2F

03/16 22:50, , 3F
恩一個是 A::aa一個就是 B::aa 你不指定 單純用 B obj;ojb.aa
03/16 22:50, 3F

03/16 22:50, , 4F
存取到的是 B::aa
03/16 22:50, 4F

03/16 23:01, , 5F
如果在A class寫一個getaa(),有沒有什麼方法可以讓其
03/16 23:01, 5F

03/16 23:02, , 6F
他子類別coll的時候回傳自己類別的aa,這是我想要的結
03/16 23:02, 6F

03/16 23:02, , 7F
03/16 23:02, 7F

03/16 23:05, , 8F
我想到的方法就是 virtual getaa 然後像妳一樣多寫一個在B
03/16 23:05, 8F

03/16 23:06, , 9F
但是 你既然是public static int aa;用 B::aa就得到了阿
03/16 23:06, 9F

03/16 23:06, , 10F
不用透過物件
03/16 23:06, 10F

03/16 23:07, , 11F
我說的virtual 意思是 A寫getaa B去override 他
03/16 23:07, 11F

03/16 23:10, , 12F
這方法可行耶@@
03/16 23:10, 12F

03/16 23:11, , 13F
其實有個list裡面存了很多A*,可是都new不同的衍生類
03/16 23:11, 13F

03/16 23:12, , 14F
別,所以在listMan裡面沒辦法針對每個obj去各別存取
03/16 23:12, 14F

03/17 00:40, , 15F
那就如前面推文說的 virtual getaa 吧
03/17 00:40, 15F
文章代碼(AID): #1BdvPq_S (C_and_CPP)