Shiba/Shiba Language/ユーザー定義型
をテンプレートにして作成
ホーム
検索
最終更新
ヘルプ
Wiki書式ヘルプ(整形ルール)
開始行:
* ユーザー定義型 [#u10b9718]
#contents
* 概要 [#k79548b7]
|項目|pod|struct|class|interface|utility|h
|デフォルトコンストラクタのユーザー定義|x *1|x *1|o|x...
|コンストラクタ|o|o|o|x|x|
|デストラクタ|x|o|o|x|x|
|静的コンストラクタ&br;静的デストラクタ|o|o|o|x|o|
|メンバ変数|o|o|o|x|x|
|structメンバ変数|x|o|o|x|x|
|objectメンバ変数|x|o|o|x|x|
|メンバ関数|o|o|o|o|x|
|ガベージコレクタ対象|x|x|o|o|x|
|インターフェースの継承|x|x|o|o|x|
|公開修飾子(public/private)|o|o|o|x|o|
|代入オーバーロード|x|o|x|x|x|
|>|>|>|>|>|ver2.0|
|invariant|o|o|o|x|x|
|scope属性|x|x|o|x|x|
|inlineメンバ変数|o|o|o|x|x|
*1 : 全部0(規定値)で初期化。
structでも許さない理由は,static変数にstructな変数を定義...
関数コールは.init初期化が終わった後から呼び出すように統一...
** interface [#s160dc18]
- C#,Dのinterfaceと同じ
- interfaceは複数にinterfaceを継承することができる
#code(c,){{
interface IButtonListener
{
// 継承したクラスは必ず実装する必要がある。
void onButtonPush( in IButton sender )const;
};
}}
** class [#gcd95ad1]
- 強制的にobject型を継承している
- DやC#のように1つだけの継承できるはできる。多重継承はで...
- interfaceは何個でも継承できる
** pod [#y7b8ef47]
- plain object data
- C言語のstructに近い
- デフォルトコンストラクタはオブジェクトのメモリ領域を0で...
** struct [#g20f0c14]
- 継承のないC++のクラス・D言語のscope classと同じ
- ガベージコレクト対象ではないので,structなオブジェクト...
** utility [#maa1e0a9]
- static関数のみ提供する型,インスタンスを作ることができ...
* メンバ公開修飾子 - public private(class,struct) [#f2079...
- protectedは無い。
- デフォルトはpublic
- コロンを使うC++スタイル、メンバ変数・関数に直接記述する...
#code(c,){{
class A
{
//--- 公開修飾子(デフォルトpublic)
// C++/Dスタイル
public:
void funcPubA(){} // public
private:
void funcPriA(){} // private
// JAVA/C#/Dスタイル
public void funcPubB(){} // public
private void funcPriB(){} // private
};
}}
* オーバーライドチェック - override(class) [#a382e838]
- D,C#と同じ
* 不変条件 - invariant(class,pod,struct) [#h6f6ff79]
- (all)Dのinvariantとほぼ同じ
-- 呼び出されるタイミング
--- publicなメンバ関数の実行直前・直後
--- publicメンバ変数にアクセスする直前・直後
--- コンストラクタの直後
--- デストラクタの直前
-- invariant関数内でpure constメンバ関数以外のメンバ関数...
- <要検討>structで再帰呼び出しされたらどうしよう(classは...
-- ↑これってどういう意味だっけ;
* コンストラクタ - this() (class,pod,struct) [#ta13d165]
- (all)D言語の形式を採用し、関数名はthisを使う
- (all)別コンストラクタ関数コールは可能
- (all)どのコンストラクタよりも前に.Initデータをメモリ領...
- (struct,pod)デフォルトコンストラクタは定義できない(0初...
#code(c,){{
class A
{
public:
this()
{
mY = mX + 1;
}
this(in int x, in int y)
: this()
{
mX = x;
mY = y;
}
int mX = 1; // 直接初期化子を書くことが出来る。ただし...
int mY; // 指定がないとデフォルトコンストラクタが呼ば...
};
}}
* デストラクタ - ~this() (class,struct) [#p2eecfc4]
- D言語スタイルを採用
#code(){{
class A
{
public:
~this()
{
}
};
}}
* 静的コンストラクタ - static this() (class,struct,pod,ut...
- D言語と同じ
- 静的コンストラクタが呼ばれる前に,.initデータがメモリ領...
#code(){{
class A
{
static int hoge = 1;
static int foo; // hoge * 2を代入したいが,他の変数を...
static this()
{
// この時点で,.initデータがコピー済み。
// つまり,hogeには1,fooには0(デフォルト値)が代...
foo = hoge * 2; // ここなら他の変数を参照すること...
}
};
}}
* 静的デストラクタ - static ~this() (class,struct,pod,uti...
- D言語と同じ
#code(){{
class A
{
static ~this()
{
}
};
}}
* 静的メンバ関数 (class,interface,pod,struct,utility) [#t...
- D言語と同じ。
* 静的メンバ変数 (class,pod,struct) [#u1b23ba6]
- D言語と同じ。
* メンバ関数 (class,interface,struct,pod) [#l90075b8]
- (all)C++でいうメンバ関数のconst修飾子はあり。引数リスト...
- (class)抽象関数にoverrideキーワードが使え,ちゃんと継承...
* メンバ変数 (class,struct,pod) [#xe0c9c25]
終了行:
* ユーザー定義型 [#u10b9718]
#contents
* 概要 [#k79548b7]
|項目|pod|struct|class|interface|utility|h
|デフォルトコンストラクタのユーザー定義|x *1|x *1|o|x...
|コンストラクタ|o|o|o|x|x|
|デストラクタ|x|o|o|x|x|
|静的コンストラクタ&br;静的デストラクタ|o|o|o|x|o|
|メンバ変数|o|o|o|x|x|
|structメンバ変数|x|o|o|x|x|
|objectメンバ変数|x|o|o|x|x|
|メンバ関数|o|o|o|o|x|
|ガベージコレクタ対象|x|x|o|o|x|
|インターフェースの継承|x|x|o|o|x|
|公開修飾子(public/private)|o|o|o|x|o|
|代入オーバーロード|x|o|x|x|x|
|>|>|>|>|>|ver2.0|
|invariant|o|o|o|x|x|
|scope属性|x|x|o|x|x|
|inlineメンバ変数|o|o|o|x|x|
*1 : 全部0(規定値)で初期化。
structでも許さない理由は,static変数にstructな変数を定義...
関数コールは.init初期化が終わった後から呼び出すように統一...
** interface [#s160dc18]
- C#,Dのinterfaceと同じ
- interfaceは複数にinterfaceを継承することができる
#code(c,){{
interface IButtonListener
{
// 継承したクラスは必ず実装する必要がある。
void onButtonPush( in IButton sender )const;
};
}}
** class [#gcd95ad1]
- 強制的にobject型を継承している
- DやC#のように1つだけの継承できるはできる。多重継承はで...
- interfaceは何個でも継承できる
** pod [#y7b8ef47]
- plain object data
- C言語のstructに近い
- デフォルトコンストラクタはオブジェクトのメモリ領域を0で...
** struct [#g20f0c14]
- 継承のないC++のクラス・D言語のscope classと同じ
- ガベージコレクト対象ではないので,structなオブジェクト...
** utility [#maa1e0a9]
- static関数のみ提供する型,インスタンスを作ることができ...
* メンバ公開修飾子 - public private(class,struct) [#f2079...
- protectedは無い。
- デフォルトはpublic
- コロンを使うC++スタイル、メンバ変数・関数に直接記述する...
#code(c,){{
class A
{
//--- 公開修飾子(デフォルトpublic)
// C++/Dスタイル
public:
void funcPubA(){} // public
private:
void funcPriA(){} // private
// JAVA/C#/Dスタイル
public void funcPubB(){} // public
private void funcPriB(){} // private
};
}}
* オーバーライドチェック - override(class) [#a382e838]
- D,C#と同じ
* 不変条件 - invariant(class,pod,struct) [#h6f6ff79]
- (all)Dのinvariantとほぼ同じ
-- 呼び出されるタイミング
--- publicなメンバ関数の実行直前・直後
--- publicメンバ変数にアクセスする直前・直後
--- コンストラクタの直後
--- デストラクタの直前
-- invariant関数内でpure constメンバ関数以外のメンバ関数...
- <要検討>structで再帰呼び出しされたらどうしよう(classは...
-- ↑これってどういう意味だっけ;
* コンストラクタ - this() (class,pod,struct) [#ta13d165]
- (all)D言語の形式を採用し、関数名はthisを使う
- (all)別コンストラクタ関数コールは可能
- (all)どのコンストラクタよりも前に.Initデータをメモリ領...
- (struct,pod)デフォルトコンストラクタは定義できない(0初...
#code(c,){{
class A
{
public:
this()
{
mY = mX + 1;
}
this(in int x, in int y)
: this()
{
mX = x;
mY = y;
}
int mX = 1; // 直接初期化子を書くことが出来る。ただし...
int mY; // 指定がないとデフォルトコンストラクタが呼ば...
};
}}
* デストラクタ - ~this() (class,struct) [#p2eecfc4]
- D言語スタイルを採用
#code(){{
class A
{
public:
~this()
{
}
};
}}
* 静的コンストラクタ - static this() (class,struct,pod,ut...
- D言語と同じ
- 静的コンストラクタが呼ばれる前に,.initデータがメモリ領...
#code(){{
class A
{
static int hoge = 1;
static int foo; // hoge * 2を代入したいが,他の変数を...
static this()
{
// この時点で,.initデータがコピー済み。
// つまり,hogeには1,fooには0(デフォルト値)が代...
foo = hoge * 2; // ここなら他の変数を参照すること...
}
};
}}
* 静的デストラクタ - static ~this() (class,struct,pod,uti...
- D言語と同じ
#code(){{
class A
{
static ~this()
{
}
};
}}
* 静的メンバ関数 (class,interface,pod,struct,utility) [#t...
- D言語と同じ。
* 静的メンバ変数 (class,pod,struct) [#u1b23ba6]
- D言語と同じ。
* メンバ関数 (class,interface,struct,pod) [#l90075b8]
- (all)C++でいうメンバ関数のconst修飾子はあり。引数リスト...
- (class)抽象関数にoverrideキーワードが使え,ちゃんと継承...
* メンバ変数 (class,struct,pod) [#xe0c9c25]
ページ名: