「独習C++」のサンプルコードでわからないところがあります.
以下のプログラムでは,画面上に図形の形状を描くクラス階層を定義しています.
階層の上部には抽象クラスShapeがあります.
具体的なサブクラスとして, 以下の4つの派生クラスを定義しています.
- 長方形を描くRectangleクラス
- 三角形を描くTriangleクラス
- 直線を描くLineクラス
- 何も描かないNullShapeクラス
実際のプログラムは以下です.
C++
1//図形を表示するプログラム 2#include<iostream> 3#include<cstdlib> 4#include<typeinfo> 5using namespace std; 6 7class Shape{ 8public : 9 virtual void func() = 0; 10}; 11 12class Rectangle : public Shape{ 13public : 14 void func(){ 15 cout << "Rectangle" << endl; 16 cout << "*******" << endl << "* *" << endl << "*******" << endl << endl;; 17 } 18}; 19 20class Triangle : public Shape{ 21public : 22 void func(){ 23 cout << "Triangle" << endl; 24 cout << "*" << endl << "* *" << endl << "*****" << endl << endl; 25 } 26}; 27 28class Line : public Shape{ 29 void func(){ 30 cout << "Line" << endl; 31 cout << "********" << endl<< endl; 32 } 33}; 34 35class NullShape : public Shape{ 36 void func(){ 37 cout << "Nullshape" << endl << endl; 38 } 39}; 40 41 42 43Shape *generator() 44{ 45 switch(rand()%4){ 46 case 0: 47 return new Line; 48 case 1: 49 return new Rectangle; 50 case 2: 51 return new Triangle; 52 case 3: 53 return new NullShape; 54 } 55 return NULL; 56} 57 58int main() 59{ 60 int i; 61 Shape *p; 62 63 for(i=0; i<10; i++){ 64 p = generator(); 65 66 cout << typeid(*p).name() << endl; 67 68 //Nullでないときのみ,オブジェクトを描画する 69 if(typeid(*p) != typeid(NULL)){ 70 p->func(); 71 } 72 } 73 74 return 0; 75} 76 77
ここで,以下の部分について質問があります
C++
1Shape *generator() 2{ 3 switch(rand()%4){ 4 case 0: 5 return new Line; 6 case 1: 7 return new Rectangle; 8 case 2: 9 return new Triangle; 10 case 3: 11 return new NullShape; 12 } 13 return NULL; 14}
この*generator()関数の返り値は
return new classname
となっています.
なぜ, ここでnewを用いる必要があるのでしょうか?
仮想関数に関して理解が不十分で,ここの部分で何が起きているのかわかりません.
説明が長くてすみません,どなたかお力を貸してください…!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/11 10:50
2019/09/11 11:26
2019/09/11 11:44
2019/09/11 13:41