C++/CLIをつつく10-構造体・モジュール。サブルーチン♪
構造化プログラミングの記事で処理をサブルーチンとして纏める事の大事さを一緒に考えたよね? そのサブルーチンを実現するための機能がこの構造体なんだ。 実はC++/CLIの実行環境であるCLIではまた違う意味を持っているんだけど、 その事についてはクラスを知らないと分からない話しなんで日を改めてつつくよ。
このシリーズの前回である 列挙体の記事 では値に名前をつける方法をつっついたけど、 構造体とは値だけではなくて関数(メソッド)とか変数(フィールド) を纏めるためのものなんだ。あっそうそう、構造体が持つ変数は フィールドと呼ぶピヨ。
じゃあさっそくサンプルコードを見てみよう。
#include "stdafx.h"
using namespace System;
namespace Sample
{
public value struct Bird
{
public:
//フィールド
String^ Name;
Int32 Age;
//メソッド
void Talk( ) {
Console::WriteLine( "ワタシハ{0}。年は{1}だよ。",
this->Name, this->Age);
}
};
}
using namespace Sample;
int main(array< System::String ^> ^args)
{
Bird b;
b.Name = "インドリ";
b.Age = 29;
b.Talk( );
return 0;
}
このサンプルコードをじっくり見れば分かるけど、構造体はフィールドと メソッドを持てるんだ。えっ?何故変数をフィールドと呼んだり、 関数をメソッドって呼ぶかって?うーんそれは、言語設計者の趣味じゃないかな?多分、 C++/CLIを作った人はこう呼べば分かりやすいと思ったんだろうね。
あと注意が必要なのはC++/CLIは構造体を作る方法が
value structと、
value classの2通りがあるんだ。 この2つの文法の違いは省略した時のデフォルトのアクセス修飾子の違いなんだ。 アクセス修飾子というのは、publicとかprivateのなどの事で、
value structはpublic、
value classはprivateなんだけど、 した方がいいいよ。その方が間違いが減るし、多言語を使用してややこしくなることはないしね。 では
value structと
value classはどちらを使用した方がいいのかというと、 ボク個人の意見としては
value structがお勧めだよ。この方がクラスとの違いが分かりやすいからね。もちろん
value classの方でもいいけど、 一度決めたらそのプロジェクト内ではひとつに統一することが肝心だよ。 そうしないとバグの元になるよ。
短いけど構造体について今言えることはこれだけピヨ。
次回へ続く・・・