演習 3: cone クラスの作成

この演習では、ビジュアル・エディターを使用して cone クラスを作成します。 cone クラスは三次元の円錐を表します。

前の演習では、UML モデリング・ツールを使用して、circle および sphere クラスを拡張しました。この演習では、UML モデリング・ツールを使用して、プロジェクトに cone クラスを追加します。cone クラスは、shape3d クラスから継承され、円錐の半径および高さに基づいて体積および表面積を表示します。 UML モデリング・ツールを使用して、プロジェクトにクラスを追加したり、クラスに属性を追加したりすることができます。 メソッドのボディを編集するには、図内のメソッドをダブルクリックし、コード・エディターでソース・コードを編集します。

Shapes プロジェクトへの cone クラスの追加

「C/C++ プロジェクト・エクスプローラー」ビューを使用して、 プロジェクトにクラスを追加することができます。 「新規 C++/クラス (New C++/Class)」ウィザードを使用して継承関係を識別できます。

Shapes プロジェクトに cone クラスを追加するには、以下のようにします。
  1. 「C/C++ プロジェクト・エクスプローラー」ビューで、「Shapes」プロジェクトを右クリックしてから、「新規」>「クラス」をクリックします。
  2. 「新規 C++ クラス (New C++ Class)」ウィンドウの「名前」フィールドに cone と入力し、「参照」をクリックします。
  3. 「基本クラスの選択 (Choose Base Class)」ウィンドウの「マッチするタイプ」リストから、shapes3d をダブルクリックします。
  4. 「C/C++ プロジェクト・エクスプローラー」ビューで、cone.h を展開し、 cone クラス要素をクリックして、ダイアグラム・エディターにドラッグします。

これで、Shapes プロジェクトに cone クラスが追加されました。 UML モデリング・ツールを使用して、新規クラスにクラスおよび属性を追加することができます。 作成した図は次のようになります。

Shapes プロジェクトには新規 cone クラスが含まれています。

cone クラスへの getColor および setColor メソッドの追加

cone クラスは、基本形状クラスが定義する getColor および setColor メソッドを実装します。

cone クラスに getColor および setColor メソッドを追加するには、以下のようにします。
  1. ダイアグラム・エディターで、classdiagram.dnx 図の中の cone クラスを右クリックし、次に、「追加 C/C++」> 「フィールド」をクリックします。
  2. 「C++ フィールドの作成」ウィンドウの「名前」フィールドに、 color と入力します。
  3. 「タイプ」リストに string と入力し、 「完了」をクリックします。
  4. ダイアグラム・エディターで、classdiagram.dnx 図の中の cone クラスを右クリックし、 次に、「追加 C/C++」>「メソッド」をクリックします。
  5. 「C++ メソッドの作成」ウィンドウの「名前」フィールドに、 getColor と入力します。
  6. 「戻り値の型」リストに string と入力し、 「完了」をクリックします。
  7. cone クラスで getColor メソッドをダブルクリックし、 コード・エディターで次のように getColor メソッドのボディを指定します。{return color;};
  8. ダイアグラム・エディターで、classdiagram.dnx 図の中の cone クラスを右クリックし、 次に、「追加 C/C++」>「メソッド」をクリックします。
  9. 「C++ メソッドの作成」ウィンドウの「名前」フィールドに setColor と入力し、「完了」をクリックします。
  10. cone クラスで setColor メソッドをダブルクリックし、 コード・エディターで、void setColor(string c) のようにメソッドのシグニチャーを指定し、{color = c;}; のように setColor メソッドのボディを指定します。

これで、cone クラスに getColor および setColor メソッドが追加されました。

cone クラスへの getSize および setSize メソッドの追加

cone クラスは、基本形状クラスが定義する getSize および setSize メソッドを実装します。 サイズ・フィールドに円錐の高さが保管されます。

cone クラスに getSize および setSize メソッドを追加するには、以下のようにします。
  1. ダイアグラム・エディターで、classdiagram.dnx 図の中の cone クラスを右クリックし、次に、「追加 C/C++」> 「フィールド」をクリックします。
  2. 「C++ フィールドの作成」ウィンドウの「名前」フィールドに、 size と入力します。
  3. 「タイプ」リストから「double」を選択し、「完了」をクリックします。
  4. ダイアグラム・エディターで、classdiagram.dnx 図の中の cone クラスを右クリックし、 次に、「追加 C/C++」>「メソッド」をクリックします。
  5. 「C++ メソッドの作成」ウィンドウの「名前」フィールドに、getSize と入力します。
  6. 「戻り値の型」リストで、「void」の横にある下矢印をクリックし、「double」を選択して、「完了」をクリックします。
  7. cone クラスで getSize メソッドをダブルクリックし、 コード・エディターで次のように getSize メソッドのボディを指定します。{return size;};
  8. ダイアグラム・エディターで、classdiagram.dnx 図の中の cone クラスを右クリックし、 次に、「追加 C/C++」>「メソッド」をクリックします。
  9. 「C++ メソッドの作成」ウィンドウの「名前」フィールドに setSize と入力し、「完了」をクリックします。
  10. cone クラスで setSize メソッドをダブルクリックし、 コード・エディターで次のように setSize メソッドのボディを指定します。{size = s < 0 ? 0:S;};

これで、cone クラスに getSize および setSize メソッドが追加されました。

cone クラスへの getRadius および setRadius メソッドの追加

cone クラスは、基本形状クラスが定義する getRadius および setRadius メソッドを実装します。 半径フィールドには、円錐の底の半径が保管されます。 アプリケーションはこの半径を使用して、円錐の外周および体積を計算します。

getRadius および setRadius メソッドを追加するには、以下のようにします。
  1. ダイアグラム・エディターで cone クラスを右クリックし、次に、「追加 C/C++」>「フィールド」をクリックします。
  2. 「C++ フィールドの作成」ウィンドウの「名前」フィールドに、 radius と入力します。
  3. 「タイプ」リストで「double」をクリックし、「完了」をクリックします。
  4. ダイアグラム・エディターで、classdiagram.dnx 図の中の cone クラスを右クリックし、 次に、「追加 C/C++」>「メソッド」をクリックします。
  5. 「C++ メソッドの作成」ウィンドウの「名前」フィールドに、 getRadius と入力します。
  6. 「戻り値の型」リストから「double」を選択し、「完了」をクリックします。
  7. cone クラスで getRadius メソッドをダブルクリックし、 コード・エディターで次のように getRadius メソッドのボディを指定します。{return radius;};
  8. ダイアグラム・エディターで、classdiagram.dnx 図の中の cone クラスを右クリックし、 次に、「追加 C/C++」>「メソッド」をクリックします。
  9. 「C++ メソッドの作成」ウィンドウの「名前」フィールドに setRadius と入力し、「完了」をクリックします。
  10. cone クラスで setRadius メソッドをダブルクリックし、 コード・エディターで次のように setRadius メソッドのボディを指定します。{radius = r < 0 ? 0:r;};

これで、cone クラスに getRadius および setRadius メソッドが追加されました。

cone クラスへの surfaceArea および volume メソッドの追加

cone クラスは、 shapes3d クラスが定義する surfaceArea (表面積) および volume (体積) メソッドを実装します。円錐の表面積の計算に使用される式は pi * r * (r + (r2 + h2)1/2) です。 円錐の体積を計算する式は 1/3 x pi x r2 h です。

cone クラスに surfaceArea および volume メソッドを追加するには、以下のようにします。
  1. ダイアグラム・エディターで、classdiagram.dnx 図の中の cone クラスを右クリックし、 次に、「追加 C/C++」>「メソッド」をクリックします。
  2. 「C++ メソッドの作成」ウィンドウの「名前」フィールドに、surfaceArea と入力します。
  3. 「戻り値の型」リストから「double」を選択し、「完了」をクリックします。
  4. cone クラスで surfaceArea メソッドをダブルクリックし、 コード・エディターで次のように surfaceArea メソッドのボディを指定します。{return pi * radius * (radius + (pow(pow(radius,2) + pow(size,2),0.5)));};
  5. ダイアグラム・エディターで、classdiagram.dnx 図の中の cone クラスを右クリックし、 次に、「追加 C/C++」>「メソッド」をクリックします。
  6. 「C++ メソッドの作成」ウィンドウの「名前」フィールドに volume と入力し、「完了」をクリックします。
  7. cone クラスで volume メソッドをダブルクリックし、 コード・エディターで次のように volume メソッドのボディを指定します。{return 0.333 * pi * (pow(radius,2) * size);};

これで、cone クラスに surfaceArea および volume メソッドが追加されました。

cone クラスへの set および print メソッドの追加

cone クラスは、基本形状クラスが定義する set および print メソッドを実装します。

cone クラスに set および print メソッドを追加するには、以下のようにします。
  1. ダイアグラム・エディターで、classdiagram.dnx 図の中の cone クラスを右クリックし、 次に、「追加 C/C++」>「メソッド」をクリックします。
  2. 「C++ メソッドの作成」ウィンドウの「名前」フィールドに print と入力し、「完了」をクリックします。
  3. cone クラスで print メソッドをダブルクリックし、 コード・エディターで次のように print メソッドのボディを指定します。
    { cout  << "Cone:"
    			<< "\n\tLength = " << getSize()
    			<< "\n\tArea   = " << surfaceArea()
    			<< "\n\tVolume = " << volume()
    			<< "\n\tColor  = " << getColor()
    			<< "\n\n";
    };
  4. ダイアグラム・エディターで、classdiagram.dnx 図の中の cone クラスを右クリックし、 次に、「追加 C/C++」>「メソッド」をクリックします。
  5. 「C++ メソッドの作成」ウィンドウの「名前」フィールドに set と入力し、「完了」をクリックします。

これで、cone クラスに print および set メソッドが追加されました。

cone.cpp ファイルの編集

cone.cpp クラス・ファイルには、set メソッドの実装と、コンストラクターおよびデストラクターの実装が含まれます。set メソッドのボディを変更して、 円錐のサイズおよび半径を入力するようにプロンプトが出されるようにします。 また、新規 cone クラスの初期値を設定するようにデフォルト・コンストラクターを編集する必要もあります。

cone.cpp ファイルを編集するには、以下のようにします。
  1. 「C++ プロジェクト・エクスプローラー」ビューで、 cone.cpp クラスをダブルクリックします。
  2. コード・エディターで、cone.cpp クラスに次のようにデフォルト・コンストラクターのボディを指定します。{color="Transparent"; radius=0; size=0;}
  3. メソッド宣言セクションで、次のように set メソッドのボディを指定します。
    void cone::set()	{
    	double size;
    	double radius;
    	string color;
    	
    	cout << "Enter the height of the cone: ";
    	cin >> size; 
    	setSize(size);
    	
    	cout << "Enter the radius of the base of the cone: ";
    	cin >> radius; 
    	setRadius(radius);
    	
    	cout << "Enter the color of the cone: ";
    	cin >> color;
    	setColor(color);
    }
  4. プロジェクトを保存するには、「ファイル」>「保存」をクリックします。

set メソッドを cone.cpp クラス・ファイルに追加することによって、Shapes プロジェクトが完成しました。

拡張アプリケーションの実行

アプリケーションを実行する前に、main.cpp クラスに include 文を追加して、 新規 cone クラスを組み込む必要があります。main.cpp クラスを変更することで、 アプリケーションを実行して、新規 cone クラスをインスタンス化できます。

アプリケーションを実行するには、以下のようにします。
  1. 「C++ プロジェクト・エクスプローラー」ビューで、 main.cpp クラスをダブルクリックします。
  2. クラスの宣言セクションで、#include "tetrahedron.h" の下に次の include 文を追加します。#include "cone.h"
  3. コード・エディターで、クラスのメイン・ボディに次のコードを追加します。
    //instantiate and run the cone class 
    		cone c;
    		c.print();
    		c.set();
    		c.print();
  4. プロジェクトを保存してビルドするには、「ファイル」>「保存」をクリックします。
  5. 「実行」をクリックします。

プログラムは、円錐形状のサイズ、色、表面積、および体積を表示し、 新しい円錐インスタンスの値を指定するようにプロンプトを出します。