21xrx.com
2024-11-10 00:17:38 Sunday
登录
文章检索 我的文章 写文章
C++类及多文件结构实现杨辉三角形打印
2023-07-05 00:21:50 深夜i     --     --
C++ 多文件结构 杨辉三角形 打印

杨辉三角形是一种非常有趣并且简单的数学形式,它逐行递增并且呈三角形的形式展现。在计算机科学中,我们可以使用C++类及多文件结构来实现杨辉三角形的打印。这里,我们将简要介绍如何使用C++实现这个程序。

首先,我们需要定义一个Triangel类,用于计算和打印杨辉三角形。Triangel类需要包括以下几个核心成员函数:

- constructor(int n): 用于初始化Triangel类,并创建一个n层的杨辉三角形。

- void printTriangle(): 用于打印已经创建的杨辉三角形。

- private int calculate(int row, int col): 用于计算某个特定位置的数值。

接下来,我们应该建立一个抽象的基类和两个派生类,这些类都用于实现不同类型的输出。这样可以使我们的程序更为灵活,可以根据用户的需求来选择输出方式。下面是一个简单的类图示例,包含了我们所需的基类及其两个子类:

![C++类及多文件结构实现杨辉三角形打印类图](https://github.com/JinLin228/MyImageHub/blob/main/ClassDiagram.jpg "类图")

使用类接口和类继承后,我们就可以开始实现我们的程序了。为了方便管理,我们可以将程序分割成多个文件。我们可以将Triangel基类存储在Triangle.h文件中,以及将两个派生类分别存储在ConsolePrinter.h和FilePrinter.h文件中。

下面是Triangle.h文件中的代码实现:


class Triangle {

protected:

  int n_rows; // 层数

  int **p; // 用于存储每层数字的数组

public:

  Triangle(int n);

  virtual void print() = 0;

  virtual ~Triangle() = default;

protected:

  void calculate(); // 计算每一层数字

};

在ConsolePrinter.h文件中,我们可以定义一个“ConsolePrinter”派生类,并重载其“print”函数。这样我们就可以通过控制台输出杨辉三角形了。下面是ConsolePrinter.h文件中的代码实现:


class ConsolePrinter : public Triangle {

public:

  ConsolePrinter(int n) : Triangle(n) {}

  void print() override;

  ~ConsolePrinter() override = default;

};

在FilePrinter.h文件中,我们可以定义一个“FilePrinter”派生类,并重载其“print”函数。这样我们就可以将杨辉三角形的输出结果写入到文件中了。下面是FilePrinter.h文件中的代码实现:


class FilePrinter : public Triangle {

public:

  FilePrinter(int n, const std::string &fname) : Triangle(n), file_name(fname) {}

  void print() override;

  ~FilePrinter() override = default;

private:

  std::string file_name; // 存储文件名

};

最后,我们需要重载基类中的“calculate”函数,并将其实现建立在派生类的实现之上。这样,我们就可以通过调用基类的“calculate”函数来计算杨辉三角形的每一个数值了。下面是实现代码:


// 重载基类中的calculate函数

int ConsolePrinter::calculate(int row, int col) {

  if (col == 1 || col == row)

    return 1;

  else

    return p[row - 1][col - 1] + p[row - 1][col];

}

// 重载基类中的calculate函数

int FilePrinter::calculate(int row, int col) {

  if (col == 1 || col == row)

    return 1;

  else

    return p[row - 1][col - 1] + p[row - 1][col];

}

通过使用类及多文件结构实现杨辉三角形打印,我们可以更好的展现程序的灵活性和维护性。我们还可以通过增加新的派生类,来实现新的输出形式,以适应不同类型的需求。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复