Menu
Coddy logo textTech

長方形の実装

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

challenge icon

チャレンジ

簡単

Rectangleを実装して、Shape Drawerプロジェクトの構築を続けましょう。これは、Circleで行ったものと同様に、基底のShape構造体を埋め込む、もう1つの具象図形です。

既存のプロジェクトを基に、次のファイルにrectangleの機能を追加します。

  • shape.h: 前のレッスンで作成した、DrawFuncおよびAreaFuncの関数ポインタ型を持つ基底Shapeインターフェースを維持します。
  • circle.hおよびcircle.c: 前のレッスンで作成したCircleの実装を維持します。
  • rectangle.h: ここでRectangle構造体を定義します。rectangleはShapefirst memberとして埋め込み、widthおよびheightフィールド(どちらもdouble)を追加します。widthとheightのパラメーターを受け取り、値としてRectangleを返すconstructor関数create_rectangleをDeclareします。
  • rectangle.c: rectangle固有の動作をImplementします。
    • draw_rectangle: Drawing Rectangle with width: X.XX and height: X.XXをPrintします(どちらの値も小数点以下2桁で表示)
    • area_rectangle: width × heightを返します
    • create_rectangle: Rectangleを初期化し、埋め込まれたShapeの関数ポインタをrectangleの関数に接続し、寸法を設定して、rectangleを返します
  • main.c: 同じインターフェースを通じて両方の図形が動作することを示します。2つの入力、つまりrectangleのwidthとheightを読み取ります。constructorを使用してrectangleをCreateし、埋め込まれたShapeの関数ポインタを通じてdrawareaの両方をCallします。areaを小数点以下2桁でPrintします。

プログラムは2つの入力、つまりwidthheightの値(浮動小数点数)を受け取ります。

入力が4.03.0の場合の出力例:

Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00

入力が7.52.5の場合の出力例:

Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75

Circleと同様に、RectangleはShapeをfirst memberとして埋め込むため、埋め込まれたmemberを通じて関数ポインタにアクセスできます。この一貫したパターンによってポリモーフィズムが可能になります。つまり、両方の図形をShapeインターフェースを通じて統一的に扱えます。すべてのヘッダーファイルでinclude guardを使用することを忘れないでください。

自分で試してみよう

#include <stdio.h>
#include "shape.h"
#include "rectangle.h"

int main() {
    double width, height;
    scanf("%lf", &width);
    scanf("%lf", &height);
    
    // TODO: create_rectangle(width, height) を使って長方形を作成する
    
    // TODO: 埋め込まれた Shape の関数ポインタを通じて draw を呼び出す
    
    // TODO: 埋め込まれた Shape の関数ポインタを通じて area を呼び出す
    // TODO: 小数点以下2桁で面積を出力する: "Area: %.2f\n"
    
    return 0;
}

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Cオンラインコンパイラ