Re: 關於c++的繼承

看板Programming作者時間17年前 (2007/06/18 10:32), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《LPH66.bbs@ptt.cc (ha(ruhi|yate)ism)》之銘言: > ※ 引述《jiannrong@kkcity.com.tw ( )》之銘言: > : 請教一下 > : c++的繼承可以寫public/preotected/private > : 我的意思是class可以寫 > : class Hobbit:public people > : class Hobbit:protected people > : class Hobbit:private people > : 而這些不同的繼承方式究竟會有什麼差別呢? > : 我有博碩的書 可是書本內沒有解釋這個 > : 所以在此請教 > : 謝謝 > 換一本書吧 這種東西是應該要解釋的 (不然就是你沒看到) > 它們的差別大致如下 > class base > { > public: > int base_pub; > private: > int base_priv; > protected: > int base_prot; > }; > class pubDer: public base > { > void f() > { > base_pub=0; //OK, 它還是public > base_priv=0; //error, 因為它是private > base_prot=0; //OK, 它還是protected > } > }; > class privDer: private base > { > void f() > { > base_pub=0; //OK, 但它變成private > base_priv=0; //error > base_prot=0; //OK, 它也變成private > } > }; > class privDer2: public privDer > { > void g() > { > base_pub=0; //error, 因為在privDer中它是private > base_prot=0; //error, 同上 > } > }; > class protDer: protected base > { > void f() > { > base_pub=0; //OK, 但它變成protected > base_priv=0; //error > base_prot=0; //OK, 它還是protected > } > }; > class protDer2: public protDer > { > void g() > { > base_pub=0; //OK, 因為在protDer中它是protected > base_prot=0; //OK, 同上 > } > }; > int main(void) > { > pubDer pubd; > privDer privd; > protDer protd; > pubd.base_pub=0; //OK, 因為它是public > privd.base_pub=0; //error, 因為它是private > protd.base_pub=0; //error, 因為它是protected > return 0; > } 謝謝 等一下我會試試看你提供的程式碼 了解一下他到底怎麼跑 不過我先附上我寫的 我想了解是哪裡錯了 謝謝 請問以下的protected繼承為何會有錯誤呢 #include <iostream> using namespace std; class people { protected: public: void display(int); void show(); int height; }; void people::display(int xyz ){ height=xyz; cout<<"高"<<height<<endl; } void people::show( ){ height=100; cout<<"高"<<height<<endl; } class Hobbit:protected people { private: int id; public: void show(); } ; void Hobbit::show() { display(110); id=1; cout<<"id為"<<id<<endl; } int main() { people a; Hobbit b; cout <<"a\n"; a.display(160); cout <<"\nb\n"; b.display(110); //這一行會有錯誤 b.show(); system("PAUSE"); return 0; } -- ┌─────KKCITY─────┐─┐KKADSL六星級優質連線服務 bbs.kkcity.com.tw └─ 馬上申請帶你上網環遊全世界! └──From:140.109.140.11 ──┘ KKADSL http://adsl.kkcity.com.tw --

06/18 19:15, , 1F
上面範例不是有說了 你用protected繼承
06/18 19:15, 1F
文章代碼(AID): #16TUwZ00 (Programming)
文章代碼(AID): #16TUwZ00 (Programming)