相关疑难解决方法(0)

在构造函数中调用虚函数

假设我有两个C++类:

class A
{
public:
  A() { fn(); }

  virtual void fn() { _n = 1; }
  int getn() { return _n; }

protected:
  int _n;
};

class B : public A
{
public:
  B() : A() {}

  virtual void fn() { _n = 2; }
};
Run Code Online (Sandbox Code Playgroud)

如果我写下面的代码:

int main()
{
  B b;
  int n = b.getn();
}
Run Code Online (Sandbox Code Playgroud)

人们可能期望将n其设置为2.

事实证明,n设置为1.为什么?

c++ constructor overriding virtual-functions

220
推荐指数
6
解决办法
9万
查看次数

构造函数的C++虚函数

为什么以下示例打印"0"以及必须更改它以打印"1",如我所料?

#include <iostream>
struct base {
   virtual const int value() const {
      return 0;
   }
   base() {
      std::cout << value() << std::endl;
   }
   virtual ~base() {}
};

struct derived : public base {
   virtual const int value() const {
      return 1;
   }
};

int main(void) {
   derived example;
}
Run Code Online (Sandbox Code Playgroud)

c++ oop virtual constructor class

57
推荐指数
3
解决办法
4万
查看次数

虚拟方法未被调用

我有一个名为Panel的基类,其中存储了一些关于窗口的信息,然后,我有所有控件的子类:Button,Label等.在基类中,我有virtual void ApplySchemeSettings(Scheme* scheme) { }方法,在Panel(Panel* parent)构造函数中调用.但是,不是子类,而是调用ApplySchemeSettings基类(Panel).

class Panel
{
    [...]

public:
    virtual void ApplySchemeSettings(Scheme* scheme) { };

    Panel(Panel* parent)
    {
        [...]

        this->ApplySchemeSettings(scheme());
    };
}

class Frame : public Panel
{
    [...]

public:
    void ApplySchemeSettings(Scheme* scheme)
    {
        this->border = scheme->GetBorder("FrameBorder");
    }
}
Run Code Online (Sandbox Code Playgroud)

我不能声明ApplySchemeSettings为抽象,因为子类是由用户创建的.

c++ virtual inheritance class

5
推荐指数
1
解决办法
844
查看次数