ぴぐノート

Good code is its own best documentation.

C/C++ プログラミング言語

C++でインターフェイスを作成しよう。

投稿日:

私事ですが今後業務ではC++を使用することになりそうです。
今まではウェブ関連の業務であったり、ちょっとしたテスト程度だったのでJavaを中心に使っていたため、C++の文法など少し忘れ気味です…。

先日もC++で「インターフェイスの予約語なんだっけ?interfaceじゃないの?」と慌てました。
リハビリがてらにインターフェイスをC++で実装してみたいと思います。

そもそもインターフェイスとは?

インターフェイスとは「複数のオブジェクトに関して共通する機能を実装させる」手段です。
時計を例にとると、壁掛け時計であっても、腕時計であっても、AppleWatchであっても「時を刻む」という機能があるはずです。

また新しいデザインの時計を思いついたとしましょう。
このNewClockにもやはり「時を刻む」という機能を追加しなければなりません。

こういった「クラスが実装しなければならない機能を抽象化するもの」がインターフェイスです。

Javaでのインターフェイス

Javaではこのインターフェイスは予約語(interface)として規定されているので、初心者向けの教本などにも記載があります。
簡単なサンプルコードを見てみましょう。

上記のように予約語、interfaceを使い、実装しなければならない機能を宣言します。
実装されるクラスでは予約語、implementsに続いて宣言したインターフェイスを記述します。

すると、Clockクラスでticktackメソッドが定義されていない場合はコンパイルエラーとなります。

C++でのインターフェイス

Javaとは異なりC++にはinterfaceという予約語はありません。
しかしデザインパターンなどを使用する場合などインターフェイスを利用したい場合は以下のように実装します。

virtualキーワードを付与することで、そのメンバ関数は仮想関数となり、派生クラスで再定義を可能にします。
さらにメンバ関数を宣言する際に、[ = 0 ]と記載すると定義を省略することができ、この「virtualキーワード + [ = 0]」の組み合わせは純粋仮想関数と呼ばれます。

このように実装することで純粋仮想関数を含むクラスを継承したクラスは純粋仮想関数をオーバーライドしなければオブジェクトの生成ができないようになります。

まとめ

Javaはとても便利なプログラミング言語ですし、利用する機会もほかの言語に比べ比較的多いです。
そのためJavaの便利な部分に慣れすぎていると、いざほかの言語をしようしなければならない場合に躓いてしまうこともありそうです。

今後の業務は結構長期になりそうなので、C++やMFCについて再度勉強しないといけませんね…。

スポンサーリンク

スポンサーリンク

-C/C++, プログラミング言語
-

執筆者:

関連記事

【MFC】フォルダー選択ダイアログの表示【Visual C++】

出力先の指定などフォルダー選択のダイアログを表示させたいことがあります。 フォルダー選択ダイアログを表示させるためには、SHBrowseForFolder関数を使います。 SHBrowseForFol …

C++のプリプロセッサの復習をしよう その2 【#defineの活用】

前回に引き続き、C++のプリプロセッサの復習です。 前回は#includeと#defineについて記事にしましたが、【まとめ】にも記載の通り、#defineと関連するプリプロセッサは多くあります。 今 …

【MFC】マルチスレッドでプログレスバーを実装しよう その1

実は今回紹介する方法は、もしかしたら正しくないのかもしれません。 ダイアログベースのプログラムで以下の条件を満たし、プログレスバーを表示したいと考えました。 スレッド実行中はモーダルダイアログを表示さ …

【Boost】boost::property_treeの例外処理を考えよう!

ライブラリなどを使用していると、「使い方は大体分かった!使ってみよう!」とすると微妙にはまってしまうことがあります。 前回・前々回でお話しした文字コードもその一つですが今回は例外処理について考えてみま …

【MFC】マルチスレッドでプログレスバーを実装しよう その3

プログレスバーをマルチスレッドを用いた実装について最後の記事です。 引き続き作成の目的は、 スレッド実行中はモーダルダイアログを表示させること。 モーダルダイアログではプログレスバーを表示し進捗が分か …