top of page

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してみました。

ちなみに、こちらが実行時のコンソール画面です。

サンプルとして一応、下記にソースを上げておきますね。

//クラスサンプル #include <iostream> #include <windows.h> #include <string>

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

でした。

特集記事
最新記事
アーカイブ
タグから検索
まだタグはありません。
ソーシャルメディア
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page