gpt4 book ai didi

c++ - 面向对象设计 - 将 C 应用程序转换为 C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:50 25 4
gpt4 key购买 nike

我正在开始学习 C++面向对象设计。将过程代码转换为面向对象代码的已知/常用技术有哪些?哪些设计选择对以下代码有意义?

typedef struct
{
int sector;
int sectorPos;
}EndPosition;

typedef struct
{
int rotateAngles;
double brakingFactor;
}WheelStop;

WheelStop stops[][6] =
{
/* data removed for brevity */
};

typedef struct
{
int numImages; /* Number of images in win amount string */
int pixWidth;
int indexes[7]; /* indexes into NumberImages[] */
}WinAmountData;

typedef struct
{
int xOffset; /* pixel count offset before next digit */
std::string fileName;
//char fileName[20];
cairo_surface_t *image;
}ImageInfo;

ImageInfo NumberImages[] =
{
/* data removed for brevity */
};

enum { DOLLAR = 10, EURO, POUND, YEN };

double DegreesToRadians( double degrees )
{
return((double)((double)degrees * ( (double)M_PI/(double)180.0 )));
}

int InitImages( void )
{
/* uses NumberImages */
}


void DestroyNumberImages( void )
{
/* uses NumberImages */
}

int ParseWinAmountString( char *string, WinAmountData *amtData )
{
/* uses WinAmountData and enum */
}

gboolean rotate_cb( void *StopPos )
{
/* uses EndPosition and stops */
}

static gboolean on_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
/* uses CairoImage class */
}

static void destroy (GtkWidget *window, gpointer data)
{
/* cleanup GTK stuff */
}

我已经考虑过了,我可以看到可能有两个类:

  • CWinAmount 将包含处理货币金额的数据结构和函数,这些货币金额将放置在“纺车”上。
  • CWheel,它将封装控制车轮动画机制的车轮数据结构和函数。

但我不确定这是否是一个好的设计。

最佳答案

我不会提供有关如何进行此类转换的确切细节(这完全取决于您)。但是,您描述的方法听起来像是一个非常合理的设计。通常,在将代码转换为 OO 时,我会找到最明显的具有共享状态的函数和结构分组,并将它们包装在一起。然后我查看保留了哪些函数,并尝试确定它们是否属于现有对象,是否具有某种可以证明将它们分组的关系,或者将它们保留为通用函数(如果我可以选择的话)。

一般来说,转换为 OO 风格并不是 secret ,大多数方法只是尝试将任何/所有共享状态/功能分组到 block (对象)中。

关于c++ - 面向对象设计 - 将 C 应用程序转换为 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11638477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com