TOP >> マニアックなプログラミング
トリッキーコードネット トリッキーなコード

【7行プログラミング/ショートコーディング】構造体コンストラクタを利用した幾何学模様表示 (C++)

幾何学模様の表示 (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++)

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++) へ続きます。
トリッキーコードネット の TOPへ HOTNEWS の 総合TOPへ