ぴぐノート

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++, プログラミング言語
-

執筆者:

関連記事

【OpenCV】OpenCVを使ってみよう!表示・回転・拡縮・二値化

前回インストールを行ったOpenCVライブラリを使ってサンプルプログラムをいくつか作成してみましょう。 OpenCVはすごく有名な画像処理ライブラリなのでインターネットで探せばサンプルプログラムはたく …

【Boost】Boostライブラリの日付を使ってみよう!

先日の記事でBoostをインストールできたのでBoostのライブラリを使って遊んでみましょう。 今回は日付に関する情報をBoostから取得・表示したり、〇月〇日~□月□日が何日間あるか(期間)取得して …

【OpenCV】OpenCVをビルドして画像処理をしてみよう!

今日はOpenCVを使って画像表示をしてみたいと思います。 ツールやアプリケーションを作る場合、多かれ少なかれ画像処理は必要になってくるのではないでしょうか。 また画像処理関係ではまると泥沼化する場合 …

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

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

【Boost】オープンソースライブラリBoostをインストールしよう

普段からC++でのプログラムを作成していてBoost(ブースト)を知らないという人はあまり多くないかもしれませんが、「実はまだ使ったことない…」という人もいるのではないでしょうか? ライブ …