top of page

C++で継承してメンバ関数をhidingした話

  • S.H.
  • 2017年7月16日
  • 読了時間: 3分

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

でした。

最新記事

すべて表示
templateとvector使ってクラスを定義してみた

最近、C++の勉強がてら競技プログラミングの問題を解くことが多くなった。 で、入力や出力の方法が似たようなコードを毎回書いたりしててた時、 「これ、テンプレートとvector使ったクラスで楽できないかな?」 と思い、さっそく書いてみた。...

 
 
 
C++の標準ライブラリとかでゲームブック風サンプルを作ってみた。

ふと、C++のリファレンス読みながら「標準ライブラリだけでも簡単なゲーム作れそう」と思い、さっそく作ってみた。 以前、作ったノベルゲーム風サンプルをもとに作ったので、そんなに時間はかからなかったかな? 作ってみた感想としては、「簡単なゲームブックならこれで十分?」って感じ。...

 
 
 
CoderDojo吉賀に参加してきた

先日、ウチの地元で開催されていた第三回CoderDojo吉賀に参加してきた。 一応、メンターとしての参加は今回で二回目。前回参加したのは、第一回だったねー。 メンターといっても、チビッ子たちの色んな質問に答えたり、機材の不調をどうにかしたりって感じ。...

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