C++/CLIをつつく1ーシステムデータタイプ。必要不可欠なものピヨ。
その際、C#との対比がしやすいように、あえてC#の記事の内容と同じにするよ。
見比べたい場合は、ここを使用すると便利だよ。
では始めるよ。準備いいかな?
こんピヨー。今日も元気にプログラミングしよう。このサイトのメイン記事はディープなものだけど、 もっと多くの人に楽しんでもらうために基礎部分を書くことにしたピヨ。
僕も完璧じゃないから基礎の復習の意味合いもかねているからこっちもどんどん書くよ。
これから連載する一連のC++/CLIの記事をマスターしたらCPUのシミュレートとか色々楽しめること間違いなし! C++/CLI初心者の人も僕と一緒に楽しもう。
じゃあ早速、C++/CLIの基礎を復習/学習しよう。
プログラミング言語を学ぶ際に最初にするべきなのは、hello worldプログラムを書くことと、 言語が持つ基礎的な型を学ぶことなんだ。 では、早速次のプログラムを実行してみて。
#include "stdafx.h"
using namespace System;
using namespace System::IO;
using namespace System::Reflection;
namespace TypeTest {
ref class Program {
public:
static void ShowType( Type^ type, StreamWriter^ writer ) {
FieldInfo^ max = type->GetField( "MaxValue" );
FieldInfo^ min = type->GetField( "MinValue" );
str = String::Format(
"型【{0}】の最大値は【{1}】:最小値は【{2}】です。",
type->FullName,
max->GetValue( nullptr ),
min->GetValue( nullptr ) );
Console::WriteLine( str );
writer->WriteLine( str );
}
};
}
int main(array ^args)
{
FileStream^ file = gcnew FileStream( "型の最小値と最大値.txt",
FileMode::OpenOrCreate );
StreamWriter^ writer = gcnew StreamWriter( file );
array^ types = gcnew array {
Type::GetType("System.SByte"),
Type::GetType("System.Byte"),
Type::GetType("System.Int16"),
Type::GetType("System.UInt16"),
Type::GetType("System.Int32"),
Type::GetType("System.UInt32"),
Type::GetType("System.Int64"),
Type::GetType("System.UInt64"),
Type::GetType("System.Single"),
Type::GetType("System.Decimal")
};
for each(Type^ tyep in types )
TypeTest::Program::ShowType( tyep, writer );
writer->Close( );
return 0;
}
今回はC++との基本構文の違いをよく確かめてね。でも処理内容についてはまだ気にしなくてもいいよ。
実行すればCLSに様々な型がある事と最小値と最大値が違う事がわかると思う。ここで読者の中には、C#のサンプルはシステムデータ型(プリミティブ型)を使用しているのに、何故C++/CLIはCLSの名前を使っているのか気になる人がいると思う。 それは、C++のネイティブ型もあるからややこしいからなんだ。 C++/CLIを使用する際には素直にCLIの型を使用しよう。 おっと、忘れるところだった。
サンプルプロプログラムの型以外にも後数個あって、
trueとfalseの2つしか値がないSystem.Boolean型、
Unicode文字1つを表すSystem.Char型、
char型が複数ある文字列を表すSystem.String型、
全ての型の始祖であるSystem.Object型があるよ。
まだ良くわからないところがあると思うけど、これからの記事で実際に扱っている所を見たら判るようになるよ。だから焦らない焦らない。硬くならないで気楽に読んでね。
じゃあ、近いうちにまた合おう。バイバイ。また来てね。
C#の記事はここで終わっているけど、C++経験者の為に追記しておくよ。
「^」記号はハンドル型を表すんだ。これはGCにオブジェクトの管理を任せる事を表しているんだ。 managed・C++よりも見やすくなったよね。 他にもarray<>で配列を作るところとか、gcnewとか、nullptr(CLI専用のヌルポインタ) とか、foreach文があるとか、色々managed・C++からの変更が激しいから注意してね。