幾何学模様の表示 (C言語)の続きです。
前回C言語で幾何学模様を表示していたものを、C++に移植したものが以下のコードです。
#include <iostream>
using namespace std;
int x,y,X,Y,T;void main(){cout<<"ヨコ タテ モヨウ(1-3)ヲニュウリョク"<<endl;cin>>X>>Y>>T;
struct a{short*s;a(){s=new short[X];for(x=0;x<X-1;x++,y++){switch(T){case 1:s[
x]=rand()%2?'/':'\';break;case 2:s[x]=(((2+((x-X/2+((y-Y/2)>>9))>>8)+((y-Y/2
)>>9))%2)<<8)==0?'/':'\';break;case 3:s[x]=((((4410+x*y/(x+y+1))%2)<<8))==0?
'/':'\';}}s[x]=0;cout<<(char *)s<<endl;delete[]s;};}*b=new struct a[Y];
delete[]b;}
残念な事に8行になってしまいましたが、
どうしても7行以内に収めなければ気がすまない人は delete[]部分(← newで確保したメモリの解放部分)を削除すれば、7行以内にカッチリ収まります。
(まぁ、如何に文字数を減らす為とはいえ、非常に推奨できないコーディングなわけですが・・・orz)
プログラムの実行結果
プログラムの実行結果は、前回のC言語プログラム実行結果と同じです。
C++幾何学模様プログラミングの解説
それでは、コードを解説します。
冒頭のコードに、適切な改行・インデントを入れたものが以下のコードです↓↓
1 : #include <iostream>
2 : using namespace std;
3 :
4 : int x,y,X,Y,T;
5 :
6 : void main()
7 : {
8 : cout << "ヨコ タテ モヨウ(1-3)ヲニュウリョク" << endl;
9 : cin >> X >> Y >> T;
10 :
11 : struct a {
12 :
13 : short * s;
14 :
15 : a(){
16 : s = new short[X];
17 : for(x=0;x<X-1;x++,y++) {
18 : switch (T) {
19 : case 1: s[x] = rand() % 2 ? '/' : '\'; break;
20 : case 2: s[x] = (((2+((x- X/2 +((y-Y/2)>>9))>>8)+((y-Y/2)>>9))%2)<<8) == 0 ? '/' : '\'; break;
21 : case 3: s[x] = ((((4410+ x*y/(x+y+1))%2)<<8)) == 0 ? '/' : '\';
22 : }
23 : }
24 : s[x]=0;
25 : cout << (char *)s << endl;
26 : delete [] s;
27 : };
28 :
29 : } * b = new struct a[Y];
30 :
31 : delete [] b;
32 : }
11~29行目には、struct a 構造体が宣言されています。
そして、15~27行目には、struct a構造体のコンストラクタが宣言されています。
この様にC++では、構造体内にメンバ関数を含めることができ、
さらに構造体内に、コンストラクタ・デスクトラクタも含めることができるのです!!
(これは、「Cの構造体」と「C++の構造体」の、非常に大きな差異と言えます。)
29行目で、構造体の宣言と同時に、構造体の配列を動的に作成しており、
配列の1つ1つの構造体が作成される度に、コンストラクタも順に呼び出されます。
(※ ↑↑この一連の動作が、C言語での二重ループに相当します^^;)
構造体のコンストラクタを利用して幾何学模様を描画するのは、(*^ー゚)b グッジョブ!! と言えるのではないでしょうか??
(意味不明)
幾何学模様サンプル集 (C,C++) へ続きます。