21xrx.com
2024-12-22 22:25:23 Sunday
登录
文章检索 我的文章 写文章
C++模板类继承另一个模板类的示例代码
2023-07-06 18:43:05 深夜i     --     --
C++ 模板类 继承 示例代码 另一个模板类

C++模板类是一种非常强大的工具,可以用来创建高度通用的数据结构和算法。而模板类继承则是一种进一步优化和扩展模板类的方式。在本文中,我们将探讨一些示例代码,演示如何将一个模板类继承到另一个模板类中。

假设我们有一个模板类`MyArray`,它可以存储任何类型的数据。现在我们想创建另一个模板类`MySortArray`,它将继承`MyArray`,并可以按照指定的顺序对其元素进行排序。

以下是`MyArray`模板类的定义:


template <typename T>

class MyArray {

private:

  T* data;

  int size;

public:

  MyArray(int s) : size(s), data(new T[s]) {}

  T& operator[](int index) {

    if (index < 0 || index >= size)

      throw std::out_of_range("Index out of range");

    return data[index];

  }

};

现在,我们可以使用此类来创建一个存储整数的数组:


MyArray<int> arr(5);

arr[0] = 3;

arr[1] = 1;

arr[2] = 4;

arr[3] = 2;

arr[4] = 5;

接下来,我们来创建一个`MySortArray`类,它将继承`MyArray`类,并可以按照指定的顺序对其元素进行排序。以下是`MySortArray`的定义:


template <typename T>

class MySortArray : public MyArray<T> {

public:

  MySortArray(int s) : MyArray<T>(s) {}

  void sort(bool ascending = true) {

    for (int i = 0; i < this->size; i++) {

      for (int j = 0; j < this->size - 1; j++) {

        if ((ascending && this->data[j] > this->data[j+1]) || (!ascending && this->data[j] < this->data[j+1])) {

          T temp = this->data[j];

          this->data[j] = this->data[j+1];

          this->data[j+1] = temp;

        }

      }

    }

  }

};

注意到我们继承了`MyArray`类,通过 `public`继承可以获得`MyArray`的全部成员,并保留其公共接口。`MySortArray`增加了一个名为`sort()`的成员函数来排序元素。

好的,我们现在可以创建一个`MySortArray`并对其进行排序了:


MySortArray<int> sorted(5);

sorted[0] = 3;

sorted[1] = 1;

sorted[2] = 4;

sorted[3] = 2;

sorted[4] = 5;

sorted.sort();

此时,`sorted`数组已经按照升序排列了,我们也可以通过第二个参数来选择降序排列:


MySortArray<int> sorted(5);

sorted[0] = 3;

sorted[1] = 1;

sorted[2] = 4;

sorted[3] = 2;

sorted[4] = 5;

sorted.sort(false);

在实际开发中,模板类和继承是两种很强大的实现方式,同时也是 C++ 语言中比较难理解和使用的部分。通过上述示例代码,相信读者已经对模板类的继承应用有了更加深刻的认识。

  
  

评论区

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