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してみました。
ちなみに、こちらが実行時のコンソール画面です。

サンプルとして一応、下記にソースを上げておきますね。
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
でした。
最新記事
すべて表示最近、C++の勉強がてら競技プログラミングの問題を解くことが多くなった。 で、入力や出力の方法が似たようなコードを毎回書いたりしててた時、 「これ、テンプレートとvector使ったクラスで楽できないかな?」 と思い、さっそく書いてみた。...
ふと、C++のリファレンス読みながら「標準ライブラリだけでも簡単なゲーム作れそう」と思い、さっそく作ってみた。 以前、作ったノベルゲーム風サンプルをもとに作ったので、そんなに時間はかからなかったかな? 作ってみた感想としては、「簡単なゲームブックならこれで十分?」って感じ。...
先日、ウチの地元で開催されていた第三回CoderDojo吉賀に参加してきた。 一応、メンターとしての参加は今回で二回目。前回参加したのは、第一回だったねー。 メンターといっても、チビッ子たちの色んな質問に答えたり、機材の不調をどうにかしたりって感じ。...