復習:Greeter
CoddyのCジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 43/61。
チャレンジ
簡単Greeter システムを構築して、function pointer によるポリモーフィズムを示しましょう。同じ struct type が、どの greeting function に接続されているかに応じて異なる出力を生成します。
コードを3つのファイルに分けて整理します。
greeter.h:ここで greeter のインターフェースを Define します。const char*(挨拶する相手の名前)を受け取り、何も返さない function pointer type calledGreetFuncを Create します。次に、language(const char*)と、typeGreetFuncのgreetfunction pointer を含むGreeterstruct を Define します。greeter.c:異なる言語を表す greeting functions を Implement します。greet_english:Hello, name!を Print します。greet_spanish:Hola, name!を Print します。
main.c:ここですべてをまとめます。Greeterinstances を2つ Create します。1つは English 用、もう1つは Spanish 用で、それぞれ対応する greeting function に接続します。名前を input として Read し、その後、両方の greeter に対してgreetfunction を Call して、ポリモーフィックな動作を示します。
プログラムは、挨拶する名前という1つの input を受け取ります。
language を English に設定した English greeter と、language を Spanish に設定した Spanish greeter を Create します。それぞれの greeter について、その language にコロンとスペースを続けて Print し、その後、input の名前を指定して greet function を Call します。
input が Maria の場合の出力例:
English: Hello, Maria!
Spanish: Hola, Maria!input が Carlos の場合の出力例:
English: Hello, Carlos!
Spanish: Hola, Carlos!両方の greeter は同じ Greeter type ですが、それぞれの greet member に異なる function が assigned されているため、異なる挨拶を生成します。header file では include guards を使用することを Remember してください。
自分で試してみよう
#include <stdio.h>
#include <string.h>
#include "greeter.h"
int main() {
// 名前の入力を読み取る
char name[100];
scanf("%s", name);
// TODO: 英語のグリーターを作成する
// - language を "English" に設定する
// - greet を greet_english 関数に設定する
// TODO: スペイン語のグリーターを作成する
// - language を "Spanish" に設定する
// - greet を greet_spanish 関数に設定する
// TODO: 各グリーターについて:
// 1. language の後に ": " を付けて出力する
// 2. name を渡して greet 関数を呼び出す
return 0;
}
オブジェクト指向プログラミングのすべてのレッスン
自分で練習してみよう: Cオンラインコンパイラ