ぴぐノート

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】MFCのピクチャーコントロールに描画しよう!

前回、OpenCVを使って画像の回転や二値化などを行って動作確認をしました。 今回はMFCでダイアログベースのアプリケーションを作成し、ピクチャーコントロールにOpenCVで読み込んだ画像を表示させて …

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

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

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

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

C++のプリプロセッサの復習をしよう その1

C++を勉強していた時期から苦手だったのがプリプロセッサでした。 インクルートガードに#ifndefやら#defineやら#pragma onceやら…。 C++に限った話ではありませんが …

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

昨日に続き、プログレスバーをマルチスレッドを用いて実装してみましょう。 作成の目的は、 スレッド実行中はモーダルダイアログを表示させること。 モーダルダイアログではプログレスバーを表示し進捗が分かるこ …