类可以仅继承成员的声明,而没有定义吗?

时间:2018-07-23 09:56:09

标签: c++

我正在尝试在c ++中模拟部分类。但是,当我仅使用继承时就会出现问题。

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QLabel *interLabel;
    QLabel *resultLabel;
    bool calculated;
    bool specialStart;
    const QMap<QString, void(MainWindow::*)()> Operators;

    // Group 1
    void setResult(const QString &str);
    void appendResult(const QString &str);
    void prependResult(const QString &str);
    void chopResult(const int &num);
    void removeResult(const int &num);
    void removeResult(const int &pos, const int &num);
    QString getResult(const bool &chopDot = true);
    void setInter(const QString &str);
    void appendInter(const QString &str, const bool &autoSpace = true);
    void prependInter(const QString &str, const bool &autoSpace = true);
    void chopInter(const int &num);
    void removeInter(const int &num);
    void removeInter(const int &pos, const int &num);
    QString chopInterOp(const int &num);
    QString removeInterOp(const int &num);
    QString getInter() const;
    QString lastOp() const;
    bool isBracketUnclosed() const;
    bool endsWithBracket() const;
    void closeAllBracket();
    bool isLastOpArithmetic() const;
    void replaceLastOp(const QString &str);

    // Group 2
    void addNumber(const QString &str);
    void calculate();
    void calculate(const QString &op);
    void arithmetic(const QString &op);
    void unarySpecial(const QString &format);
    void binarySpecial(const QString &format);
    void plus();
    void minus();
    void multiply();
    void divide();
    void equal();
    void erase();
    void dot();
    void negate();
    void ce();
    void c();
    void percent();
    void sqrt();
    void sqr();
    void inv();
    void root();
    void pow();
    void sin();
    void cos();
    void tan();
    void asin();
    void acos();
    void atan();
    void log();
    void mod();
    void fac();
    void sinh();
    void cosh();
    void tanh();
public slots:
    void buttonPushed();

};

这是我的课程定义(很长!) 我想将成员函数的声明分为两个函数组,分别是setResult()〜replaceLastOp()和addNumber()〜tanh()

如果我简单地使Mainwindow类继承两个类,那就太好了(然后必须声明和定义这两个类。) 但是,这是不可能的,因为第2组函数使用第1组中的函数,而第1组函数使用成员变量,包括interLabel,resultLabel等...

这是第1组中一个函数的示例

QString MainWindow::getResult(const bool &chopDot){
    QString &&result = this->resultLabel->text();
    if(chopDot){
        if(result.back() == '.'){
            this->setResult(result.chopped(1));
        }
    }
    return result;
}

这是第2组中一个函数的示例

void MainWindow::addNumber(const QString &str){
    if(this->calculated){
        if(!this->getInter().isEmpty() && !this->isLastOpArithmetic())
            this->setInter(this->chopInterOp(1));
        this->setResult(str);
        this->calculated = false;
    }
    else{
        if(this->getResult(false) == "0"){
            if(str == "0")
                return;
            else{
                this->setResult(str);
            }
        }
        else{
            if(this->specialStart){
                this->setResult(str);
                this->specialStart = false;
            }
            else
                this->appendResult(str);
        }
    }
}

因此,如果我使用继承来解决此问题,则必须像下面这样写

class Group1 : public MainWindow{...};
class Group2 : public Group1{...};

看起来很奇怪。 (看来父母与子女的关系是相反的) 因此,我想模拟不具有继承或仅声明式继承(如果可能)的部分类,这样我不必在MainWindow类中再次声明函数。

0 个答案:

没有答案