在派生类中实现虚函数时访问基类私有成员

时间:2016-05-13 10:31:14

标签: c++

我对C ++的OO方面没有太多经验,我试图将一些代码移植到我的知识中,但我遇到了问题。我有一个像这样定义的类:


class ExtendedKalmanFilter
{
private:

    double dt;


public:
    ExtendedKalmanFilter(int states);

    virtual VectorXd f(VectorXd x, VectorXd u);
    virtual MatrixXd F(VectorXd x);
    virtual VectorXd h(VectorXd x);
    virtual MatrixXd H(VectorXd x);

    ~ExtendedKalmanFilter();
};

我有另一个继承ExtendedKalmanFilter并实现虚函数的类:


class KineticEnergyEKF : public ExtendedKalmanFilter {
public:
    KineticEnergyEKF(int nstates) : ExtendedKalmanFilter(nstates)
    {}


    VectorXd f(VectorXd x, VectorXd u)
    {
        this->dt = 1.0; //ERROR: Apparently I have no access to dt
    }
    MatrixXd F(VectorXd x);
    VectorXd h(VectorXd x);
    MatrixXd H(VectorXd x);
};

Visual Studio显示我无法访问dt,但我可以访问ExtendedKalmanFilter中定义的其他功能。如何访问dt

2 个答案:

答案 0 :(得分:4)

当您从基类继承时,其派生子级无法访问其所有私有成员。

如果您需要将它们设为外部世界,但可以对派生类进行访问,请创建此类成员'Loop through cells A6:Axxx and delete cells that contain an "x." For Each c In Range("AX6:A" & ws.Range("B" & Rows.Count).End(xlUp).Row) If c.Value2 = "NoBo" Then Set clearRng = ws.Range("B" & c.Row & ":" & "AN" & c.Row) End If clearRng.Clear Next

答案 1 :(得分:0)

dt受保护(或公开)。

类的私有成员在该类之外(除了友元函数或类)之外是不可访问的,即使是派生类也是如此。受保护的成员专门设计为派生类可访问的成员,而不是外部世界。