Menu
Coddy logo textTech

復習:Greeter

CoddyのCジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 43/61。

challenge icon

チャレンジ

簡単

Greeter システムを構築して、function pointer によるポリモーフィズムを示しましょう。同じ struct type が、どの greeting function に接続されているかに応じて異なる出力を生成します。

コードを3つのファイルに分けて整理します。

  • greeter.h:ここで greeter のインターフェースを Define します。const char*(挨拶する相手の名前)を受け取り、何も返さない function pointer type called GreetFunc を Create します。次に、languageconst char*)と、type GreetFuncgreet function pointer を含む Greeter struct を Define します。
  • greeter.c:異なる言語を表す greeting functions を Implement します。
    • greet_englishHello, name! を Print します。
    • greet_spanishHola, name! を Print します。
  • main.c:ここですべてをまとめます。Greeter instances を2つ Create します。1つは English 用、もう1つは Spanish 用で、それぞれ対応する greeting function に接続します。名前を input として Read し、その後、両方の greeter に対して greet function を 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オンラインコンパイラ