【C++】学習メモ:C++におけるクラスの書き方とJavaのそれ【Java】
はじめに
クラスの書き方
基本的な書き方
class User { //データメンバ private: std::string name_; int age_; public: //コンストラクタ User(std::string name, int age){ this->name_ = name; this->age_ = age; } //メンバ関数(ゲッタ) std::string name() { return name_; } int age() { return age_; } };
アクセス指定子:
を一度書けばまとめて適用できる(いちいち書かなくていい)。- アクセス指定子に何も指定しなければ自動的にprivate(非公開)になる。
ゲッタの書き方
- 基本的には3種類存在する
- 3つ目を使った関数は標準ライブラリには存在しない。
ヘッダ部とソース部の分割
- メンバ関数の定義はクラス定義の外で行うことができる(非インライン関数)。
- クラス利用者にとって、メンバ関数の宣言は必要だが定義は必要ない
→メンバ関数の記述は分割するべき。 - 具体的には、クラス実現の際には以下の2つに分ける。
- なお、サンプルコードではゲッタはヘッダ部に記載されている。
- クラス利用者はヘッダ部をインクルードしてクラスを利用する。
- ヘッダでusing指令を行うと、インクルード先まで影響を与えてしまうため使用しない。
感想
クラスファイルをヘッダ部とソース部に分割するところがJavaと大きく異なる点で、面食らいました。 望洋本を要約しても理由がいまいち分からなかったので少し調べてみたところ、こちらのサイトを見つけました(プログラミングメモ - C++ のソースをヘッダと実装に分ける理由とか)。 利用者のコンパイルの有無が重要なポイントになっていそうですが、そんなものかという程度で理解しきれていません。 この点に関しては、学習を続けていき後日考察し直そうと思います(いつになるか分かりませんが)。
参考文献
- 柴田望洋「新・明快C++入門」 SBクリエイティブ 2020年3月
- プログラミングメモ - C++ のソースをヘッダと実装に分ける理由とか 最終閲覧日:2020年4月10日