关于c ++:从派生类访问基类对象

Access base class object from derived class

我可能理解继承错误,但如果:

我有一个名为base的基类和一个名为derived的派生基类,

在派生类的函数中,我可以访问派生类的基对象吗?我想有点像*这个,但是对象类型是基?

编辑:我正在重写派生类中的函数base::foo(),但在此重写函数derived::foo()中,我要用基对象调用原始函数。

派生::foo()常量{

1
2
3
4
5
6
double Derived::foo() const {
  // s is a variable only associated with Derived
  double x;
  x = s + Base.foo(); // this is the line i dont know what im doing?!
  return x;
}


Derived*可以隐式转换为Base*,因此您可以这样做:

1
const Base *base = this;

虽然您通常不需要这样做,因为Base的任何成员都是由Derived继承的。

但如果foo()是虚拟的,那么执行以下操作:

1
2
const Base *base = this;
base->foo();

或同等:

1
static_cast<const Base*>(this)->foo();

不叫Base::foo(),叫Derived::foo()。这就是虚拟函数的作用。如果要调用虚拟函数的特定版本,只需指定以下哪个版本:

1
this->Base::foo(); // non-virtual call to a virtual function

当然,this->部分并非真正必要:

1
Base::foo();

很好,但是有些人更喜欢添加this->,因为后者看起来像是对静态函数的调用(我对此没有偏好)。


要调用要重写的基类函数,请调用Base::Fun(...)

您可以执行以下操作Base::foo(),这里是完整的代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Base
{
public:
    virtual double  foo() const
    {
        return 5;
    };
};

class Derived : Base
{
    int s;

public:

    Derived() : s(5)
    {
    }

    virtual double  foo() const
    {
        // s is a variable only associated with Derived
        double x;

        //NOTE THE Base::foo() call
        x = s + Base::foo(); // this is the line i dont know what im doing?!
        return x;
    }
};