結果は以下の通りです。次の例では構造体型のポインタを使用する方法について説明します。ここでは構造体型の変数のアドレスを実引数にしてhu関数を呼び出しています。仮引数では以下の通り構造体型のポインタで受けています。いう記号がありますが、これはアロー演算子と呼ばれています。アクセスするために使います。ここでは構造体型の配列のアドレスを引数にしてyo関数を呼び出しています。実引数であるseito2配列をyo関数の中の構造体型のポインタ(仮引数)で受けています。この構造体型の配列の要素にアクセスするには以下のようにポインタを進めながら書きます。この時にはアロー演算子を使います。iの値がループするごとに進むので、ポインタが示す位置も変わります。次の例では構造体の配列について説明します。以下の例ではscanfを使って、入力した値を構造体の配列に入れています。構造体の配列は以下のようにブロックの末尾に配列名と要素数を配置します。この例では以下のscanfで入力した値をメンバに代入します。scanfの引数にあるメンバはカンマで区切れば複数書くことができます。変換指定子もメンバの数だけ書いてください。入力した値をprintfで出力します。結果は以下の通りです。2015年5月7日この章ではクラスについて説明します。今までのプログラムでは変数と関数を扱ってきましたが、クラスと言う機能を使うことで、多くの変数と関数を1つの機能体として働かせてデータを処理することが出来ます。クラスとは何かしらの物を作る設計図に例えられます。設計図は車や家や鉛筆をつくる場合に必要ですが、この設計図に当たるものがクラスです。鉛筆であれば、「状態」は鉛筆の形、芯、線の濃さなどで、「ふるまい」は線を引く、削るなどの動作です。その「状態やふるまい」をクラスと言う設計図に書いていきます。「状態」を変数で書き、「ふるまい」を関数で書くことになります。その「状態やふるまい」に指示を出すのはオブジェクトです。線を消すなど具体的な指示をオブジェクトと言う司令塔から出します。「状態」は変数で書くと言いましたが、クラスの中の変数のことをプロパティと言います。「ふるまい」は関数で書くと言いましたが、クラスの中の関数のことをメソッドと言います。初めにクラスの基本から説明します。クラスの中に「状態」や「ふるまい」を書いていきます。クラス名の付け方は基本的には変数名の付け方と同じですが、変数との違いは大文字と小文字を区別しないことです。同じクラスを意味します。その他にクラス名の付け方で気を付けることは最初の文字を大文字にして後は小文字というのが慣例になっていることです。これをオブジェクト変数に代入すればオブジェクトの完成です。このオブジェクトを作る過程を「インスタンス化」と言います。クラスはただの設計図なので、オブジェクトから指示を出さないと何も動きません。先ほども説明しましたが、「線を消す」など具体的な指示をオブジェクトと言う司令塔から出します。クラスとオブジェクトの関係をもう一度説明します。新築の家をつくるとします。そこで、家にこんな機能を付けたい、あんな機能も付けたいと思い悩むことでしょう。ある人はプールや床暖房を付けたり。それを実現するには設計図にその「プールや床暖房」やプールや床暖房を操作する機能を付け加えないといけません。実際にはクラスの中にプール、床暖房という変数を設定し、プールや床暖房を実際に機能させるためにメソッドの中で水や床の温度を上げたり下げたりする機能を加える必要があります。この設計図はそのままでは動きませんので、誰かの指揮のもとに動かさなくてはいけません。その指揮者の役割がオブジェクトです。「オブジェクト」は例えば冬になったらプールの水の温度を40度にするなど細かな指示をします。クラスの例を見てみましょう。このクラスにはBanksystemという名前が付いています。以下の変数がプロパティです。プロパティの前にpublicが付いていますが、これはプロパティに対してクラスの外からでも、どこからでもアクセスが出来ることを意味します。publicは修飾子と呼ばれています。修飾子はこの他にもprivate、protectedなどがありますが、後ほど説明します。以下のようにメソッドの前にpublicが付いていますが、これはメソッドに対してクラスの外からでも、どこからでもアクセスが出来ることを意味します。次はクラスを実行する方法について説明します。クラスは設計図なのでこのままでは何も機能しません。クラスを機能させるためには以下のようにオブジェクトを作成しなくてはいけません。それが$Bankです。作り方は説明した通り、クラス名の前にnewを付け、それを変数に代入すればオブジェクトの完成です。次にプロパティにデータを入れていきます。以下のようにデータを入れます。$オブジェクトとプロパティの間にある「->」はアロー演算子と言います。クラスのプロパティやメソッドにアクセスするときに使います。次はメソッドにデータを入れます。メソッドの場合には「=」を使わないで、メソッドの引数に渡したいデータを入れます。次にプロパティをクラスの中で使用する方法について説明します。クラスの中でプロパティやメソッドを使用するためには「$this->」を使用しなくてはいけません。メソッドの中でプロパティを使用するためには次のように「$this->」を使用します。結果は「山田銀行の近藤次郎様の残高は240000」となります。オブジェクトは何個でも作成することが出来るので、次の例をみてみましょう。先ほどの例は$Bankオブジェクトだけでしたが、オブジェクトはいくつでも作成することが出来ます。以下の例では$Bank1を付け加えました。次にプロパティに対してクラスの外からのアクセスを禁止する場合の対処法について説明します。先ほどの例との違いは以下のsum関数と$moneysumの箇所です。プロパティに対してクラスの外からのアクセスを禁止する場合にはプロパティの前にprivateを付けます。privateにする理由はクラスの外から自由にプロパティの値を書き替えられては困る場合などに使われます。ようなアクセスはすることが出来なくなります。このprivate指定のプロパティにどのようにデータを入れるのかと言いますとメソッドを通してデータを入れます。それが以下のsumメソッドです。このsumメソッドは入力したデータが0より小さい場合には0を$moneysumに代入するというチェック機能を付けました。deposiメソッドやwithdrawalメソッドにはチェック機能を付けませんでしたが、sumメソッドのようにマイナスの値が入らないようにif文でチェックしています。次は「コンストラクタ」といわれる機能について説明します。コンストラクタの機能について説明します。functionの次のアンダーバーは2つあることに注意してください。コンストラクタの修飾子は必ずpublicです。この機能はコンストラクタと言いまして、オブジェクトを作成するときに自動的に呼び出されるメソッドです。newによってオブジェクトが作られるときに自動的に呼び出されるメソッドです。これは変数を初期化したい時に使用します。引数がない場合には省略できます。以下のようにオブジェクトを作成するときに自動的にコンストラクタが呼び出され、引数の値がそれぞれコンストラクタの引数に代入されます。次は静的メソッドと静的プロパティについて説明します。静的メソッドや静的プロパティはオブジェクトを作成しなくてもアクセスすることができるメソッドやプロパティで、オブジェクトからデータを入れたりすることはできません。静的メソッドや静的プロパティの作成方法はメソッドやプロパティの前にstaticを付けるだけです。ここでいくつかの注意点を説明します。staticメソッドの内部で使用することはできません。使ってアクセスすることはできません。〇静的メソッドや静的プロパティはクラスに属しているメソッドやプロパティです。今まではクラスのオブジェクトを作成して、そのオブジェクトからメソッドやプロパティにデータを入れてきました。それらのメソッドやプロパティはオブジェクトに属しているからです。以下の$Bankオブジェクトと$Bank1オブジェクトで使われるプロパティとメソッドは同じものを使っていますが、各データはそれぞれのオブジェクトの持ち物ですので、共通して使えるデータはありません。それに対して静的メソッドや静的プロパティは各オブジェクトが共通して使えるデータです。先ほどの例を見てみましょう。箇所が静的プロパティですが、そのプロパティには0が代入されています。この$totalプロパティは「クラスに属しています」。次に静的プロパティにアクセスしてみましょう。以下の箇所ではコンストラクタが呼び出されるごとに$totalに1が足されていきます。「1人目山田銀行の近藤次郎様の残高は240000」と出力されます。「2人目山田銀行の近藤次郎様の残高は240000」と出力されます。$Bankオブジェクトと$Bank1オブジェクトが1つの$totalを共通して使っていることが分かります。これは説明した通り、$totalがクラスに属しているからです。