読者です 読者をやめる 読者になる 読者になる

C++でのクラス作成方法

前回、色々とやってみたもののC++での実装ができなかったので勉強しました(笑)
まずはできたソースコード一式をみてください。

<ディレクトリ構成>
Java : 「prac.java = Mainクラス, prac.java.base =Humanクラス」
C++  : 「階層なし」だけど
名前空間は「prac::clang = Mainクラス ,prac::clang = Humanクラス」

f:id:Takunoji:20170225201328p:plainすべてのファイルを同じディレクトリに配置(名前空間も指定)

f:id:Takunoji:20170225202141p:plainフィールドが一つだけ
起動結果↓

f:id:Takunoji:20170225202537p:plainHumanクラスのhello()を呼び出す
Javaとの実装の違いが結構あります。フィールドの数が違う(Stringがcharに...)
  名前空間の解決に至るまで時間がかかりました。。。

<わかったこと>
javaでの考え方に名前空間はありますが、パッケージングとディレクトリ構成がセットになっています。
なのでC++での実装はソースファイルが同じディレクトリにあるのに名前空間の設定が成立しています。
Javaの場合はeclipse上だと分かりづらいですが、パッケージと同じディレクトリ構成が出来上がっています。

なのでC++の実装もそんな風にディレクトリ構成を変えてみました。

f:id:Takunoji:20170225204305p:plainprac::clang(/prac/clang/Cmain.cpp), prac::clang::Human.cpp
因みにC++ではヘッダファイル(*.h)とソースファイル(*.cpp)に分けて作成します。
<ヘッダーファイル>

f:id:Takunoji:20170225204618p:plain
<ソースファイル>

f:id:Takunoji:20170225204706p:plain

<作成物のクラス図>

f:id:Takunoji:20170225215430p:plain

<作成するのについまずいた所>
やった事「プロジェクト作成をして何もわからないうちにパッケージ切ったら...」

symbol not found for architecture x86 64」エラーでつまづく

解決策→プロジェクトを始めから作り直した

原因と思しき...
 1.プロジェクトに「src/」フォルダがなかった
 2.名前空間の指定が不適切だった
 3.ヘッダファイルで名前空間を指定する→ソースファイルにも名前空間を指定する

Javaではヘッダーファイルがないので「なんか似た様なこと書くのだるいんだけど..」
となりがちですが、設計性に秀でた実装方法だと思います。
「どこが?」と思う人もいるかもしれませんが
次回自分なりの実装になりますが検証してみようと思います。

は、引き続きC++の勉強を続けようと思います。

takunoji.hatenablog.com