Menu
Coddy logo textTech

Circleクラス

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

challenge icon

チャレンジ

簡単

前のレッスンで作成した Rectangle と並べて Circle class を追加し、Shape Manager の構築を続けましょう。

shape を整理するために、次の4つのファイルを使用します。

  • Shape.lua: :new(name):getName() を持つ、基底 Shape class です。
  • Rectangle.lua: 前の challenge で作成した Rectangle class で、:getArea() を持ちます。
  • Circle.lua: Shape から inheritance する Circle class を作成します。constructor は radius を受け取り、名前 "Circle" を指定して parent constructor を呼び出し、radius を Store する必要があります。円の面積を公式 πr² で計算する :getArea() method を追加します。π の値には math.pi を使用してください。
  • main.lua: Rectangle と Circle の両方の module を Require します。input から3つの値、つまり rectangle の width、rectangle の height、circle の radius を read します。それぞれの shape の instance を1つずつ Create し、4行を Print します。内容は、rectangle の名前、rectangle の area、circle の名前、circle の area です。

これで、両方の shape は inheritance を通じて同じ interface を共有します。それぞれが Shape から :getName() method を受け継ぎ、独自の :getArea() implementation を持ちます。この共通 interface は、今後のレッスンで役立ちます。

Input: 3行です。width(number)、height(number)、radius(number)の順です。

Output: 4行です。rectangle の名前、rectangle の area、circle の名前、circle の area の順です。

自分で試してみよう

-- Rectangleモジュールを読み込む
local Rectangle = require('Rectangle')

-- Circleモジュールを読み込む
-- TODO: ここでCircleモジュールを読み込む

-- 入力から幅と高さを読み取る
local width = tonumber(io.read())
local height = tonumber(io.read())

-- TODO: 入力から半径を読み取る

-- 指定された寸法で新しいRectangleインスタンスを作成する
local rect = Rectangle:new(width, height)

-- TODO: 指定された半径で新しいCircleインスタンスを作成する

-- 長方形の名前と面積を出力する
print(rect:getName())
print(rect:getArea())

-- TODO: 円の名前と面積を出力する

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

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