21xrx.com
2025-06-18 06:15:41 Wednesday
登录
文章检索 我的文章 写文章
C++模板类继承另一个模板类的示例代码
2023-07-06 18:43:05 深夜i     18     0
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++ 语言中比较难理解和使用的部分。通过上述示例代码,相信读者已经对模板类的继承应用有了更加深刻的认识。

  
  

评论区

    相似文章