C 02-プログラム設計基礎向上班(C++)13週目のオンサイトタスク-多態と虚関数
2412 ワード
第13週:教材第12章(p 395-416)を読み、主な内容は多態性であり、第13週の搭乗任務を完成した.
(C 02-プログラム設計基礎向上班(C++)学習手配に戻る)
【タスク1】ベースクラスAnimalおよびmain()関数を以下に示す.(1)main()関数から与えられた注釈ヒントに基づいて,関連する各クラスを設計する.(2)明らかに,Animalは抽象クラスとしてより適切に設計されており,Animalはインスタンス化する必要がなく,ベースクラスとして専用に使用されている.プログラムを改造して、Animalを抽象クラスに設計して、この時main()関数の中でp=new Animal()です;エラーが発生し、ローが削除されます.(3)各Animalの派生クラスには「名前」データメンバーがあり,上記のプログラムを改造し,このデータメンバーを抽象クラスAnimalデータメンバーとして各派生クラスで使用する.
【タスク2】抽象ベースクラスShapeを定義するプログラムを作成し、3つの派生クラス、Circle(円形)、Rectangle(矩形)、Triangle(三角形)を派生させる.定義されたいくつかのジオメトリの面積和を,以下のmian()関数を用いて求めた.
【タスク3】表面積と体積を求める2つの純粋な虚関数を含む抽象クラスCSolidを設計する.派生クラスCCube、CBall、CCylinderを設計し、それぞれ正方体、球、円柱を表す.main()関数で、ベースクラスのポインタp(CSolid*p;)を定義します.pポインタを用いて,正方体,球および円柱オブジェクトの表面積および体積を出力する.
[参照:抽象クラスCSolidおよび派生クラスCCube、CBall、CCylinder-http://blog.csdn.net/sxhelijian/article/details/7566545 ]
(C 02-プログラム設計基礎向上班(C++)学習手配に戻る)
【タスク1】ベースクラスAnimalおよびmain()関数を以下に示す.(1)main()関数から与えられた注釈ヒントに基づいて,関連する各クラスを設計する.(2)明らかに,Animalは抽象クラスとしてより適切に設計されており,Animalはインスタンス化する必要がなく,ベースクラスとして専用に使用されている.プログラムを改造して、Animalを抽象クラスに設計して、この時main()関数の中でp=new Animal()です;エラーが発生し、ローが削除されます.(3)各Animalの派生クラスには「名前」データメンバーがあり,上記のプログラムを改造し,このデータメンバーを抽象クラスAnimalデータメンバーとして各派生クラスで使用する.
#include <iostream>
#include<string>
using namespace std;
class Animal
{
public:
virtual void cry() {cout<<" , ?"<<endl;}
};
int main( )
{
Animal *p;
p = new Animal(); p->cry(); // : , ?( )
Mouse m1("Jerry"); p=&m1; p->cry(); // : Jerry, , : !
Mouse m2("Limy"); p=&m2; p->cry(); // : Limy, , : !
Cat c("Tom"); p=&c; p->cry(); // : Tom, , : !
Dog d1("Droopy"); p=&d1; p->cry(); // : Droopy, , : !
Dog d2("Drooby"); p=&d2; p->cry(); // : Drooby, , : !
Giraffe g("Gill"); p=&g; p->cry(); // : Gill, , , !
system("pause");
return 0;
}
[参考:動物は何と言いますか?——面白い中で抽象類を理解します-http://blog.csdn.net/sxhelijian/article/details/7566457 ] 【タスク2】抽象ベースクラスShapeを定義するプログラムを作成し、3つの派生クラス、Circle(円形)、Rectangle(矩形)、Triangle(三角形)を派生させる.定義されたいくつかのジオメトリの面積和を,以下のmian()関数を用いて求めた.
int main()
{
Circle c1(12.6),c2(4.9); // Circle c1,c2,
Rectangle r1(4.5,8.4),r2(5.0,2.5); // Rectangle r1,r2, 、
Triangle t1(4.5,8.4),t2(3.4,2.8); // Triangle t1,t2,
Shape *pt[6]={&c1,&c2,&r1,&r2,&t1,&t2}; // pt,
double areas=0.0; //areas
for(int i=0; i<6; i++)
{
areas=areas+pt[i]->area();
}
cout<<"totol of all areas="<<areas<<endl; //
system("pause");
return 0;
}
[参照:抽象ベースクラスShapeおよび派生クラスCircle、Rectangle、Triangle-http://blog.csdn.net/sxhelijian/article/details/7566500 ] 【タスク3】表面積と体積を求める2つの純粋な虚関数を含む抽象クラスCSolidを設計する.派生クラスCCube、CBall、CCylinderを設計し、それぞれ正方体、球、円柱を表す.main()関数で、ベースクラスのポインタp(CSolid*p;)を定義します.pポインタを用いて,正方体,球および円柱オブジェクトの表面積および体積を出力する.
[参照:抽象クラスCSolidおよび派生クラスCCube、CBall、CCylinder-http://blog.csdn.net/sxhelijian/article/details/7566545 ]