【问题标题】:C++ Create class that inherits a VectorC++ 创建继承向量的类
【发布时间】:2021-09-21 04:01:23
【问题描述】:

我想知道是否可以创建一个类来继承包含向量(2d)的向量并且可以编写自己的方法。

using matrix = vector<vector<float>>;

class MyClass: public matrix;

...

MyClass m;

m = {{1,2,3}, {4,5,6}, {7,8,9}}

m.randomize(); // my method
m.pop_back() //class vector method

【问题讨论】:

  • 为什么不只有一个以矩阵为属性的类?
  • std:: 集合并非旨在继承自。
  • 这能回答你的问题吗? Thou shalt not inherit from std::vector
  • @RichardCritten “std:: 集合并非旨在继承自” 这并不完全正确。它们没有virtual 析构函数,这意味着它们不能从基指针中多态地删除;但是没有什么可以禁止他们继承。甚至链接问题的答案也表明相同。在这种情况下,我并不是说继承是个好建议。只是说它们“不是为了继承而设计的”实际上是不正确的。

标签: c++ class inheritance vector


【解决方案1】:

我想知道我是否可以创建一个类来继承包含向量(2d)的向量并且可以编写自己的方法

是的,尽管通常建议使用合成来代替,但没有什么禁止这样做的。不推荐使用的原因之一是标准容器析构函数不是virtual,因此通过基类指针删除对象不起作用。

【讨论】:

    【解决方案2】:

    当然可以,但这不是你想要的。为什么MyClass 应该有一个push_back 可以用来使矩阵非正方形的方法?为什么它的resize 方法应该设置行数而不设置列数?与组合或重构相比,从非抽象类继承几乎不是一个好主意。

    【讨论】:

      猜你喜欢
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      • 2016-04-30
      • 2013-04-19
      • 1970-01-01
      相关资源
      最近更新 更多