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データメンバーとして各派生クラスで使用する.
#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 ]