C++で継承してメンバ関数をhidingした話
C++の勉強がてら、簡単な独自クラスを作ってみた。
class Clang {
protected: string name; double ver;
public: Clang(); void set(string n, double v); void show(); ~Clang(); };
//Clangコンストラクタ Clang::Clang() {
cout << "Create Clang Object" << endl; name = ""; ver = 0; }
//set関数 void Clang::set(string s, double v) {
cout << "Set Clang Object" << endl; name = s; ver = v; }
//show関数 void Clang::show() {
cout << "Show Clang Object " << endl; cout << "Clang UserName :" << name << endl; cout << "Clang Version :" << ver << endl; }
//Clangデストラクタ Clang::~Clang() {
cout << "Delete Clang Object" << endl; }
ユーザー名とバージョン情報を保持するClangクラスになります。
メンバ関数set()を使うことで、メンバ変数を変更で、show()でメンバ変数をコンソール画面に描画します。
これをCppクラスへと継承させてみます。
class Cpp : public Clang { public: Cpp(); void show(); ~Cpp(); };
//コンストラクタ Cpp::Cpp() {
cout << "Create Cpp Object" << endl; }
//show関数(Clangのshow関数をhiding) void Cpp::show() {
cout << "Show Cpp Object" << endl; cout << "Cpp UserName :" << name << endl; cout << "Cpp Version :" << ver << endl; }
//デストラクタ Cpp::~Cpp() {
cout << "Delete Cpp Object" << endl; }
ついでに、Clang::show()をhidingしてみました。
ちなみに、こちらが実行時のコンソール画面です。
サンプルとして一応、下記にソースを上げておきますね。
using namespace std;
class Clang {
protected: string name; double ver;
public: Clang(); void set(string n, double v); void show(); ~Clang(); };
//Clangコンストラクタ Clang::Clang() {
cout << "Create Clang Object" << endl; name = ""; ver = 0; }
//set関数 void Clang::set(string s, double v) {
cout << "Set Clang Object" << endl; name = s; ver = v; }
//show関数 void Clang::show() {
cout << "Show Clang Object " << endl; cout << "Clang UserName :" << name << endl; cout << "Clang Version :" << ver << endl; }
//Clangデストラクタ Clang::~Clang() {
cout << "Delete Clang Object" << endl; }
class Cpp : public Clang {
public: Cpp(); void show(); ~Cpp(); };
//コンストラクタ Cpp::Cpp() {
cout << "Create Cpp Object" << endl; }
//Show関数(Clangのshow関数をオーバーライド) void Cpp::show() {
cout << "Show Cpp Object" << endl; cout << "Cpp UserName :" << name << endl; cout << "Cpp Version :" << ver << endl; }
//デストラクタ Cpp::~Cpp() {
cout << "Delete Cpp Object" << endl; }
int main() {
//Clangオブジェクト生成 Clang c; string username1 = "S.H."; double ver1 = 1.00;
//メンバ変数のセット c.set(username1, ver1);
//show関数でメンバ変数を描画 c.show();
Sleep(3000);
//Cppクラスオブジェクト生成 Cpp cpp; string username2 = "Asaki"; double ver2 = 2.00;
//メンバ変数のセット(Clangクラスより継承) cpp.set(username2, ver2);
//オーバーライドしたshow関数でメンバ変数を描画 cpp.show();
Sleep(3000);
return 0; }
追記:ご親切な方よツッコミをいただきまして訂正しました。
誤:オーバーライド
正:hiding
でした。