[問題] 請問private繼承 和同名成員 和using

看板C_and_CPP作者 (我好弱 又不認真)時間13年前 (2012/08/26 00:19), 編輯推噓0(0021)
留言21則, 2人參與, 最新討論串1/1
#include <iostream> using namespace std; class Box{ public: int d; Box(int va, int vb):a(va),b(vb){d=0;} void Show(){ cout<<"a="<<a<<" "<<"b="<<b<<endl; } protected: int a; int b; }; class Caton:private Box{ public: int a; int c; using Box::Show; using Box::d; //using Box::a; Caton(int va, int vb, int vc):Box(va, vb),c(vc){a=0;} void Showc(){ cout<<"a="<<Box::a<<endl; } }; int main(){ Caton c(1, 2, 3); c.Show(); c.Showc(); cout<<"d="<<c.d<<endl; return 0; } 以上的程式碼 在我沒將 using Box::a; 註解時會出錯 because of local member ‘int Caton::a’ with same name 這應該是scope的問題 不過 using就是在以 private繼承時 可以將base class的 public/protected member提升到public來繼承的方法 請問 如果一定要用這種提升權限 又遇到同名的問題的時候 除了改寫原base class 或是derived class不要讓它發生同名以外 想要把base class的a 和d一樣 可以當成public來用 還有什麼可以用的寫法嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.162.49.2 ※ 編輯: AnonymousX 來自: 1.162.49.2 (08/26 00:30) ※ 編輯: AnonymousX 來自: 1.162.49.2 (08/26 00:30)

08/26 20:12, , 1F
就增加一層中間層專做 using 的動作囉
08/26 20:12, 1F

08/26 20:48, , 2F
請問是指中間再多一層class的繼承 這層專門做using@@?
08/26 20:48, 2F

08/26 20:50, , 3F
可是最後還是private繼承 還是不能當public用吧@@...
08/26 20:50, 3F

08/26 22:03, , 4F
還是說那一層在最外面 把想變成public的用using...
08/26 22:03, 4F

08/26 22:19, , 5F
不過private繼承 在Caton就會把member變成private了...
08/26 22:19, 5F

08/26 22:20, , 6F
這樣好像也不行...
08/26 22:20, 6F

08/27 02:44, , 7F
該類別(設X) private 繼承 Box, Caton public 繼承 X
08/27 02:44, 7F

08/27 02:44, , 8F
只是初始化比較麻煩而已...
08/27 02:44, 8F

08/27 13:21, , 9F
喔喔 了解了 謝謝 !
08/27 13:21, 9F

08/27 13:22, , 10F
就是最後要變public繼承...
08/27 13:22, 10F

08/27 13:57, , 11F
不過這樣設計的話 X 沒加using的 Caton都不能用了...
08/27 13:57, 11F

08/27 22:14, , 12F
最後變 public 繼承還是不會影響你本來的語意,
08/27 22:14, 12F

08/27 22:14, , 13F
Caton is not a Box
08/27 22:14, 13F

08/27 22:49, , 14F
恩恩 謝謝回答 不過這樣應該就真的沒有在X用using處理
08/27 22:49, 14F

08/27 22:49, , 15F
的 在Caton就不能用了吧 @@
08/27 22:49, 15F

08/27 22:55, , 16F
原本Caton用private繼承Box的時候還可以access Box所有
08/27 22:55, 16F

08/27 22:55, , 17F
member只是變成Caton的private來用 加上X這樣做之後
08/27 22:55, 17F

08/27 22:57, , 18F
沒有用using的 Caton內部也都不能用了?
08/27 22:57, 18F

08/27 22:58, , 19F
有了X改用protected繼承應該就可以了?
08/27 22:58, 19F

08/28 10:34, , 20F
就看你要把門開到怎樣程度囉~ xD
08/28 10:34, 20F

08/28 21:33, , 21F
謝謝回答囉^^
08/28 21:33, 21F
文章代碼(AID): #1GEFiaVP (C_and_CPP)