ぴぐノート

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++11】後処理が必要なリソースはスマートポインタを使おう

オープンソースのライブラリのソースコードを呼んでいるとC++11で追加されたunique_ptrを使用しているところもちらほらと見られるようになってきています。 MFCなどを利用していれば動的確保した …

【Boost】boost::property_treeでXMLファイルを読み込もう!

以前はアプリケーションの設定ファイルに単純なテキストである、INIファイルを用いていたアプリケーションも多かったですが、最近はXML(Extensible Markup Language:拡張可能なマ …

【Boost】boost::property_treeでXMLファイルを書き込もう!

前回の記事でXMLファイルの書き込みは難しくなくできそうでしたネ。 今回はXMLファイルの書き込みを行い、出力してみましょう。 読み込みと同じくライブラリファイルは不要で、ヘッダーファイルのみで利用で …

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

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