之前一篇,出现断点,百思之后发现是析构函数不能正常通过,也无解决之法,就干脆去掉了。
琢磨一番后,代码精减到了100行之内了,这样就更简洁明了。完整代码如下(编译环境:在VS2019):
//业余爱好,学过C语言,自学C++,自己琢磨尝试编小程序
//太多不懂的,工作之余,练习
//初学C++ 语言,学习创建一个方块类Square
//方块类成员函数Show()显示,Spin()旋转
//成员属性指向二维数组的指针
#include <iostream>
#include<Windows.h>
#include<conio.h>
using namespace std;
#define MAX 4
//全局变量存放旋转后的临时方块,可以连续旋转操作
int temp[MAX][MAX] = { 0 };
//方块类定义
class Square
{
public:
Square(int *); //构造函数
void Show(); //显示方块
void Spin(); //旋转方块
private:
int squ[MAX][MAX] = {0}; //成员属性:指向二维数组的指针
};
//构造函数 带指针的参数
Square::Square(int* a)
{ //成员属性初始化
for (int i = 0; i < MAX ; i++)
for (int j = 0; j < MAX ; j++)
squ[i][j] = *a++;
}
//显示方块函数
void Square:: Show()
{
int* h = &squ[0][0];
for (int i =0; i < MAX * MAX;h++, i++)
{
if ( *h== 1) cout << "█"; //绘制图案
else cout << " "; //" ";
if ((i + 1) % MAX == 0) cout << endl;
}
}
//旋转方块函数定义,带返回值
void Square:: Spin()
{
for (int i = 0; i < MAX; i++) //顺时针旋转90度
for (int j = 0; j < MAX; j++)
temp[j][MAX - 1 - i] = squ[i][j];
for (int i = 0; i < MAX; i++)
for (int j = 0; j < MAX; j++)
squ[i][j] = temp[i][j];
}
int main()
{
int a[MAX][MAX] = { {0,1,0,0 },
{0,1,1,0 },
{0,1,0,0 },
{0,0,0,0 }
};
//创建一个方块类对象sq 并构造函数初始化
Square sq(&a[0][0]);
cout << "初始的图:" << endl;
sq.Show();
cout << "第一次旋转后的图:" << endl;
sq.Spin();
sq.Show();
cout << "第二次旋转后的图:" << endl;
sq.Spin();
sq.Show();
cout << "第三次旋转后的图:" << endl;
sq.Spin();
sq.Show();
cout << "按任意键退出" << endl;
_getch();
return 0;
}