![]() |
![]() |
TOP > C++ > クラスの継承(1) 継承方法 |
![]() |
![]() |
クラスの継承
C++では、あるクラスの機能を別のクラスが継承する事ができる。すなわち、「ある派生クラスがある基底クラスの機能を実装する」という事である。
クラスを継承するメリットは、共通で使用するクラスを基底クラスとし、機能が異なるところのみ、派生クラスに実装させれば記述するコード量が少なくすむ点が利点だ。
クラスを継承する時、アクセス指定子を指定する事ができる。
クラスの継承と継承方法の例
#include <iostream> using namespace std; class ParentC { int privateVal; void privateFunc(){cout << "privateVal = " << privateVal << endl;} void setPrivateVal(int val){privateVal = val;} protected: int protectedVal; void protectedFunc(){cout << "protectedVal = " << protectedVal << endl;} void setProtectedVal(int val){protectedVal = val;} public: int publicVal; void publicFunc(){cout << "publicVal = " << publicVal << endl;} void setPublicVal(int val){publicVal = val;} void accessPrivateFunc(int val) { setPrivateVal(val); privateFunc(); } }; class ChildPublic : public ParentC { public: void acceesParent(int val) { setPublicVal(val); publicFunc(); setProtectedVal(val); protectedFunc(); //コンパイルエラー!基底クラスがprivateの場合は、継承クラスからアクセス不可 //setPrivateVal(val); //privateFunc(); } }; class ChileProtected : protected ParentC { public: void accessParent(int val) { setPublicVal(val); publicFunc(); setProtectedVal(val); protectedFunc(); //setPrivateVal(val); //privateFunc(); } }; class ChildPrivate : private ParentC { public: void accessParent(int val) { setPublicVal(val); publicFunc(); setProtectedVal(val); protectedFunc(); //setPrivateVal(val); //privateFunc(); } }; int main() { //publicで基底クラスを継承 ChildPublic i_public; i_public.setPublicVal(1); i_public.publicVal = 1; i_public.publicFunc(); //i_public.setProtectedVal(2); //コンパイルエラー!protectedメンバは、非保護として継承 //i_public.setPrivateVal(3); //コンパイルエラー!privateメンバは、非保護として継承 i_public.acceesParent(2); /* * まとめ * publicで基底クラスを継承すると、 * 1.基底クラスのpublicメンバが外部からアクセスできる * 2.基底クラスのprotectedメンバは外部からアクセスできない。(非公開となるため) * 但し、継承クラス内からは、基底クラスのprotectedメンバにはアクセスできる。 * 3.基底クラスのprivateメンバは外部からアクセスできないし、継承クラスの内部から * もアクセスできない。 */ //protectedで基底クラスを継承 ChileProtected i_protected; //コンパイルエラー!protectedで継承したメンバは全て非公開になる。 //i_protected.setPublicVal(1); //i_protected.setProtectedVal(2); //i_protected.setPrivateVal(3); i_protected.accessParent(2); /* * まとめ * protectedで基底クラスを継承すると、 * 1.基底クラスの全てのメンバは外部からアクセスできない。 * 2.継承クラス内部からは、基底クラスのメンバにアクセスできる。 * */ //privateで基底クラスを継承 ChildPrivate i_private; //i_private.setPublicVal(1); //i_private.setProtectedVal(2); //i_private.setPrivateVal(3); i_private.accessParent(3); /* * まとめ * privateで基底クラスを継承すると、 * 全ての基底クラスのメンバは、継承クラスでは非公開となる。 * */ return 0; } |
![]() |
![]() |
Copyright 2007 ためになるホームページ All Rights Reserved. |