さてさてGWは完全にサボってました。totally slacked off メーン!
というわけで、再開していきます。
C++のコードってなんでhoge.hとか、hoge.cppとかに分かれているのかな〜ってのがようやくわかりました!
たとえば、accout.hというaccountクラスの定義にて、メンバとメソッドが定義されているとします。
//Account.h #ifndef _ACCOUNT_H_ #define _ACCOUNT_H_ class Account { private: double balance; public: void set_balance(double bal); //method prototype double get_balance(); //method prototype }; #endif
Include Guards
"#ifndef" や "#define"はInclude Guardsというもので、このheaderファイルが複数回コンパイル中に展開されることを防ぐためにあります。
もしコンパイル中に#ifndefに定義されているシンボル名があれば、header内容を展開せずに#endifに行く、って感じらしいです。(ほぼおまじない?と思っている)
ちなみにシンボル名はなんでもいいらしいすが、ファイル名に寄せたものを書くのが定番っぽいです。
もしくは、#pragma once
というもの使われるようですね。
pragma onceもinclude guardsと同じ処理のようですが、コンパイラによって対応していたりしなかったりするようです。
#ifndef _HEADERNAME_H_ #define _HEADERNAME_H_ // process #endif
話がずれましたが、上記のようなheaderファイルに定義されているメソッドのロジックを定義するのが、 Account.cppになるわけです。
//Account.cpp #include "Account.h" //ダブルクオーテーションを忘れないように!!!!! Account::set_balance(double bal){ balance = bal; } Account::get_balance(){ return balance; }
::を使用するケースとしては、Accoutクラスの外部にmethodのロジックを定義する場合。 クラス名::メソッド名です。これもよく見るけどそういうことだったんかーーー
privateとpublicメンバ
一応、簡単にprivateとpublicを説明すると、
Accountクラスにはprivateメンバとpublicメンバがある。
この場合、いきなり他からprivateメンバにはアクセスできないので、このようにAccountクラスのpublicメソッドを外部から呼び出して、
privateメンバの変数の値を変える流れとなる。上記例では、balance変数!
じゃあようやくmain.cppの出番ですよっと
//main.cpp #include <iostream> #include "Account.h" int main() { Account peropero; peropero.set_balance(1000.00); double bal = peropero.get_balance(); std::cout << bal << endl; //1000.00 return 0; }
またここで重要な感じですが、#includeする際の、<>で囲まれたものはシステムで定義されているもの
ダブルクオテーションで囲むものは、プロジェクト内にあるlocalファイルだよってことになります
クラスに定義されているmethodは.で使用でーす!
以上書きなぐり。