【发布时间】:2022-01-03 00:08:27
【问题描述】:
我必须修改代码,以便可以将成员添加到 2D 向量。
代码以 typedef vector<vector<int>> Matrix 开头,我将其替换为 Matrix 类。
我试图从vector<vector<int>>继承使用:
class Matrix: public vector<vector<int>> {
public:
int myMember;
};
这样我实际上不必对源代码进行太多修改。 但是,如果我尝试运行:
Matrix mymatrix (4);
它引发了一个错误:
modele.cpp:19:20: error: no matching function for call to 'Matrix::Matrix(int)'
Matrix mymatrix (4);
^
In file included from modele.cpp:8:0:
modele.h:6:7: note: candidate: Matrix::Matrix()
class Matrix: public vector<vector<int>> {
^
modele.h:6:7: note: candidate expects 0 arguments, 1 provided
【问题讨论】:
-
1.默认情况下不继承构造函数。 2. 从标准库容器继承通常不是一个好主意。它在某些情况下有效,但通常最好创建一个显式的公共接口并使用组合而不是继承。 3. 一个矩阵很难用一个嵌套向量来表示。更好的表示是通过一个平面数组/向量,并带有一个合适的
operator()重载,它接受i、j索引作为参数。除了出色的界面外,由于内存连续性,这也大大提高了效率。 -
@KonradRudolph 1. 谢谢。 2. 是的,我已经阅读了多个线程,您不应从标准库容器继承,但在我的具体情况下,我认为它会工作得很好。 3.同意,使用平面阵列更有效。但是按照教授的要求,必须使用嵌套向量。
标签: c++ oop c++11 inheritance