加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

从c中的函数返回继承类的最佳方法

发布时间:2020-12-16 10:05:39 所属栏目:百科 来源:网络整理
导读:我正在寻找关于如何继续使用C构建的类层次结构的建议. 基类是Matrix: class Matrix{protected: int rows; int columns; double* values;public:lots of stuff goes here. bla di bla di bla. virtual Matrix operator+(const Matrix addend) const;etc.
我正在寻找关于如何继续使用C构建的类层次结构的建议.

基类是Matrix:

class Matrix
{
protected:

    int rows;
    int columns;
    double* values;

public:

lots of stuff goes here. bla di bla di bla.

    virtual Matrix operator+(const Matrix& addend) const;

etc.
}

Squarematrix继承自Matrix

class Squarematrix : public Matrix
{
public:

    Squarematrix operator+(const Squarematrix& addend) const;

}

运算符分别返回矩阵或squarematrix.由于operator是一个虚函数,因此它不能编译,因为它必须在所有类中具有相同的返回类型.

那么我的选择是什么?

我可以使用普通函数而不是虚函数.这有点烦人,但在大多数情况下都不会引起问题.

在所有情况下我都可以返回一个矩阵.这基本上会使我的squarematrix类在***中使用正确的痛苦,因为我必须不断地从矩阵转向squarematrix.

我可以返回对squarematrix的引用.然后矩阵必须存储在堆上,并且无法确保将其安全删除.特别是如果我做这样的事情:

squarematrix a=b+(c+d);

(c d)将存储在堆上并且没有指向它的指针因此将被泄露.

有没有办法保持虚函数,但仍然有不同的返回类型?

在这种情况下你会提出什么建议?

谢谢你的帮助.期待您的回音.

解决方法

我建议:

>删除Squarematrix.
>向Matrix添加构造函数以构造方阵.
>如果矩阵是否为方阵的知识对您的应用程序有帮助,请在Matrix中添加成员函数来回答该查询.

class Matrix
{
   public:

      Matrix(int r);        // Construct a square matrix.
      Matrix(int r,int c); // Construct a rectangular matrix.

      bool isSquareMatrix() const { return (rows == columns); }

      Matrix operator+(const Matrix& addend) const;

   private:

      int rows;
      int columns;
      double* values;

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读