相关疑难解决方法(0)

在C++中,什么是虚拟基类?

我想知道" 虚拟基类 "是什么以及它意味着什么.

让我举个例子:

class Foo
{
public:
    void DoSomething() { /* ... */ }
};

class Bar : public virtual Foo
{
public:
    void DoSpecific() { /* ... */ }
};
Run Code Online (Sandbox Code Playgroud)

c++ virtual-inheritance

389
推荐指数
6
解决办法
30万
查看次数

应用声明是否应该隐藏继承的虚函数?

struct level0
{
  virtual void foo() = 0;
};

struct level1 : level0
{
  virtual void foo() { cout <<" level1  " << endl; }
};

struct level2 : level1
{
  virtual void foo() { cout <<" level2 " << endl; }
};

struct level3 : level2
{
  using level1::foo;
};

int main()
{
  level1* l1 = new level3;
  l1->foo();
  level3 l3;
  l3.foo();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码使用gcc给出

level2
level1
Run Code Online (Sandbox Code Playgroud)

但在icc给出

 level2
 level2
Run Code Online (Sandbox Code Playgroud)

哪一个是正确的还是标准不确定?

编辑:这证明确实存在错误,请考虑以下主要功能

int main()
{
    level3 l3;
    l3.foo(); …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance gcc icc using-declaration

7
推荐指数
1
解决办法
696
查看次数

如何使用私有继承的方法覆盖纯虚方法?

我有以下内容:

class Abstract
{
    virtual void AbstractMethod() = 0;
};

class Implementer
{
    void AbstractMethod() {};
};

class Concrete : public Abstract, private Implementer
{};
Run Code Online (Sandbox Code Playgroud)

我无法实例化,Concrete因为AbstractMethod不会覆盖纯虚方法.我究竟做错了什么?

c++ inheritance multiple-inheritance pure-virtual private-inheritance

2
推荐指数
1
解决办法
154
查看次数