C#での例とは? わかりやすく解説

C#での例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/17 16:02 UTC 版)

ダック・タイピング」の記事における「C#での例」の解説

C#バージョン4.0動的型付け可能にするdynamic型使えるようになったdynamic内部的にリフレクション利用して実装されており、該当するメソッドプロパティ存在有無実行時遅延評価する。シンボル解決失敗した場合例外スローされる。 using System;class Duck { public string Sound() { return "quack"; }}class Cat { public string Sound() { return "myaa"; }}public class DuckTypingTest { static void Test(dynamic obj) { Console.WriteLine(obj.Sound()); } public static void Main() { Test(new Duck()); Test(new Cat()); }} なお、C#C++のテンプレート似た機能としてジェネリクスサポートするが、C++テンプレートほどの柔軟性はなく、ダック・タイピング使用することはできない

※この「C#での例」の解説は、「ダック・タイピング」の解説の一部です。
「C#での例」を含む「ダック・タイピング」の記事については、「ダック・タイピング」の概要を参照ください。


C++での例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/17 16:02 UTC 版)

ダック・タイピング」の記事における「C++での例」の解説

上記Rubyの例をC++記述すると、以下のようになる。 #include template void test(const T& t) { std::cout << t.sound() << std::endl;}struct Duck { const char* sound() const { return "quack"; }};struct Cat { const char* sound() const { return "myaa"; }};int main() { test(Duck()); test(Cat());} 実行結果Rubyの例と同じである。ただし、テンプレートによるダック・タイピングコンパイル時に解決される静的ポリモーフィズム (static polymorphism) であり、動的型付け言語とは異なり実行時オーバーヘッド伴わない

※この「C++での例」の解説は、「ダック・タイピング」の解説の一部です。
「C++での例」を含む「ダック・タイピング」の記事については、「ダック・タイピング」の概要を参照ください。


C++での例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/04 09:20 UTC 版)

関数へのポインタ」の記事における「C++での例」の解説

C++において、以下の関数へのポインタは、Cの関数へのポインタとの互換性があり、呼び出し規約が同じであれば直接相互運用が可能である。 クラス属さない名前空間レベルグローバル関数フリー関数クラス静的メンバー関数 一方でクラスの非静的メンバー関数へのポインタ互換性がない。また、静的メンバー関数へのポインタ経由した関数呼び出しには、そのクラスインスタンスが必要となる。 C++では関数への参照定義するともできるが、非静的メンバー関数への参照定義することはできない。 #include void GlobalFunc1() { puts("GlobalFunc1"); }class MyClass {public: static void ClassFunc1() { puts("MyClass::ClassFunc1"); } void InstanceFunc1() { puts("MyClass::InstanceFunc1"); }};int main() { void(*fpGlobalFunc1a)() = GlobalFunc1; void(*fpGlobalFunc1b)() = &GlobalFunc1; void(&frGlobalFunc1)() = GlobalFunc1; void(*fpClassFunc1a)() = MyClass::ClassFunc1; void(*fpClassFunc1b)() = &MyClass::ClassFunc1; void(&frClassFunc1)() = MyClass::ClassFunc1; fpGlobalFunc1a(); fpGlobalFunc1b(); frGlobalFunc1(); (*fpGlobalFunc1a)(); (*fpGlobalFunc1b)(); (*frGlobalFunc1)(); fpClassFunc1a(); fpClassFunc1b(); frClassFunc1(); (*fpClassFunc1a)(); (*fpClassFunc1b)(); (*frClassFunc1)(); void(MyClass::*fpInstanceFunc1)() = &MyClass::InstanceFunc1; MyClass obj; (obj.*fpInstanceFunc1)(); return 0;} C++では関数テンプレート述語 (predicate) として通例関数オブジェクト (functor) あるいはラムダ式 (lambda expression) が渡されるが、関数ポインタを渡すことも可能である。ただし、関数オブジェクトラムダ式のほうがコンパイラ最適化によるインライン化が期待できるため好まれる。なお、ラムダ式C++11以降標準化され機能であるが、Boost C++ライブラリのBoost.Lambdaを利用することで、C++03以前でもラムダ式利用することができる。 #include #include #include bool CompareFuncGreater(const int& a, const int& b) { return a > b;}void PrintLine(int x) { std::cout << x << std::endl;}int main() { // 降順にソート。 std::vector data { 5, 24, 1, -12, 0, 8, -7 };#if 0 std::sort(data.begin(), data.end(), std::greater()); std::for_each(data.begin(), data.end(), [](int x) { std::cout << x << std::endl; });#else std::sort(data.begin(), data.end(), CompareFuncGreater); std::for_each(data.begin(), data.end(), PrintLine);#endif return 0;} また、C++11以降ではtypedefの代わりにusingを使うこともできる。typedefよりもusingのほうがいくらか分かりやすい構文になっている。 typedef double (*fx_ptr_t)(double x); 下記は上記の糖衣構文である。 using fx_ptr_t = double (*)(double x);

※この「C++での例」の解説は、「関数へのポインタ」の解説の一部です。
「C++での例」を含む「関数へのポインタ」の記事については、「関数へのポインタ」の概要参照ください


C++での例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/07/14 06:48 UTC 版)

RAII」の記事における「C++での例」の解説

以下、特に断りがない限りC++03以前でもC++11以降でもコンパイルできるコード例示する

※この「C++での例」の解説は、「RAII」の解説の一部です。
「C++での例」を含む「RAII」の記事については、「RAII」の概要を参照ください。


Cでの例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/07/15 00:00 UTC 版)

if文」の記事における「Cでの例」の解説

if(na > nb) { nc = na;} else { nc = nb;} nc = (na > nb) ? na : nb としても同じ事ができる。

※この「Cでの例」の解説は、「if文」の解説の一部です。
「Cでの例」を含む「if文」の記事については、「if文」の概要を参照ください。


Cでの例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/04 09:20 UTC 版)

関数へのポインタ」の記事における「Cでの例」の解説

以下の例では、関数へのポインタとしてfunc_ptrが宣言され、そこへ関数my_functionのアドレス割り当てている。そしてfunc_ptrを通じて関数呼び出している。 #include static int my_function(int a) { printf("my_function: %d\n", a); return 2 * a + 3;}int main(void) { int (*func_ptr)(int a) = my_function; /* あるいは以下でも可能 */ /* int (*func_ptr)(int) = &my_function; */ int x; x = (*func_ptr)(10); /* あるいは以下でも可能 */ /* x = func_ptr(10); */ printf("main: %d\n", x); return 0;} 注1: 関数シンボルf自体関数型 (function type) であり、関数型関数ポインタとは異なる。単項のアドレス演算子 (address operator) &を付与した式&fは関数ポインタ返す。しかし、関数型の式fは関数へのポインタ暗黙変換されるため、アドレス演算子適用せずとも関数へのポインタ代入可能である。 注2: 関数へのポインタfpに単項の間接演算子 (indirection operator) *を付与した式*fp関数指示子 (function designator) となる。(*fp)(arg)という構文は、関数へのポインタfp通じて関数呼び出す構文である。しかしCではfp(arg)という構文認められている。 注3: 関数ポインタ宣言における仮引数リストは、型が一致してさえいればいいので、仮引数の名前は省略できる次の例では、関数へのポインタ引数として他の関数渡している。ここでは、関数my_functionが、先の例のように関数へのポインタ通じて呼び出される関数callerは、引数として関数へのポインタ整数値を1つ取る。引数整数値は、その関数へのポインタ通じて関数呼び出すときに渡す引数として用いられる。そこで宣言されている関数へのポインタプロトタイプ適合しえすればcallerの第1引数には、どんな関数でも渡すことが可能である。 #include static void my_function(int a) { printf("my_function: %d\n", a);}static void caller(void (*func_ptr)(int a), int p) { (*func_ptr)(p);}int main(void) { caller(my_function, 10); return 0;} 3番目の例でも関数へのポインタ引数として他の関数渡して用いている。関数fは、指定され区間積分a b f ( x ) d x {\displaystyle \textstyle \int _{a}^{b}f(x)\;dx} の近似計算する関数integへ渡されている。 x {\displaystyle x} における f ( x ) {\displaystyle f(x)} の値を求めるために、f(x)がintegから呼び出されている。integでは、「double型の引数1つ取りdouble型の値を返す関数」でありさえすれば、どんな関数でも計算させることが可能である。 なお、関数へのポインタ定義する際には、事前にtypedef用いて関数型もしくは関数ポインタ型のエイリアス定義しておくと便利である。 #include #include #define PI 3.14159265358979323846typedef double (*fx_ptr_t)(double x);/* あるいは以下でも可能 *//*typedef double fx_t(double x);typedef fx_t* fx_ptr_t;*/double integ(double a, double b, fx_ptr_t fp) { double sum = 0.0; double x; int n; /* 積分 {a,b} f(x) dx計算 */ for (n = 0; n <= 100; ++n) { x = (n / 100.0) * (b - a) + a; sum += (*fp)(x) * (b - a) / (100.0 + 1.0); } return sum;}int main(void) { int i; struct pair { fx_ptr_t fp; const char* name; } pairs[3] = { { cos, "cos" }, { sin, "sin" }, { tan, "tan" }, }; printf("From 0 to pi/4:\n"); for (i = 0; i < 3; ++i) { printf("\t" "Integral of %s = %g\n", pairs[i].name, integ(0, PI/4, pairs[i].fp)); } return 0;} 関数ポインタ引数として渡すことで、処理を外部から組み込むカスタマイズする)ことが可能である。関数ポインタ受け取って関数呼び出す側は、その関数内で何が実行されるかを関知する必要がない引数として渡される関数は、コールバック関数呼ばれることもある。主にイベント処理や、判断外部任せて処理を行なうときなどに用いられる

※この「Cでの例」の解説は、「関数へのポインタ」の解説の一部です。
「Cでの例」を含む「関数へのポインタ」の記事については、「関数へのポインタ」の概要を参照ください。

ウィキペディア小見出し辞書の「C#での例」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「C#での例」の関連用語

C#での例のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



C#での例のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのダック・タイピング (改訂履歴)、関数へのポインタ (改訂履歴)、RAII (改訂履歴)、if文 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS