相关疑难解决方法(0)

具有相同名称的C++虚拟覆盖函数

我有类似的东西(简化)

class A
{
  public:
    virtual void Function () = 0;
};

class B
{
  public:
    virtual void Function () = 0;
};

class Impl : public A , public B
{
  public:
        ????
};
Run Code Online (Sandbox Code Playgroud)

如何为A实现Function()和为B实现Function()?Visual C++允许您只定义内联的特定函数(即不在cpp文件中),但我认为它是一个扩展.海湾合作委员会抱怨这一点.是否有标准的C++方式告诉编译器我要覆盖哪个函数?

(visual c ++ 2008)

class Impl : public A , public B
{
  public:
     void A::Function () {  cout << "A::Function" << endl; }
     void B::Function () {  cout << "B::Function" << endl; }
};
Run Code Online (Sandbox Code Playgroud)

谢谢!

c++ virtual overriding diamond-problem

20
推荐指数
2
解决办法
4160
查看次数

由于多个抽象基类,实现两个具有相同名称但不同的非协变返回类型的函数

如果我有两个抽象类定义一个具有相同名称但不同的非协变返回类型的纯虚函数,我如何从这些函数派生并为它们的函数定义一个实现?

#include <iostream>

class ITestA {
    public:
        virtual ~ITestA() {};
        virtual float test() =0;
};

class ITestB {
    public:
        virtual ~ITestB() {};
        virtual bool test() =0;
};

class C : public ITestA, public ITestB {
    public:
    /* Somehow implement ITestA::test and ITestB::test */
};


int main() {
    ITestA *a = new C();
    std::cout << a->test() << std::endl; // should print a float, like "3.14"
    ITestB *b = dynamic_cast<ITestB *>(a);
    if (b) {
        std::cout << b->test() << std::endl; // should print …
Run Code Online (Sandbox Code Playgroud)

c++ overriding virtual-functions multiple-inheritance abstract-base-class

6
推荐指数
1
解决办法
2776
查看次数

如何在多继承中实现具有相同名称的虚函数

代码如下

// A has a virtual function F().
class A
{
public:
    virtual void F() {};
};

// The same for B.
class B
{
public:
    virtual void F() {};
};

// C inherits A and B.
class C : public A, public B
{
public:
    // How to implement the 2 virtual functions with the same name but from
    // different base classes.
    virtual F() {...}
};
Run Code Online (Sandbox Code Playgroud)

请注意,基类中有一个F()的默认实现.

感谢Jan Herrmann和Spook.如果我们必须使用一些额外的帮助,下面是一个更简单的解决方案吗?

#include <iostream>

// A has a virtual function F(). …
Run Code Online (Sandbox Code Playgroud)

c++ multiple-inheritance

6
推荐指数
1
解决办法
5371
查看次数

我可以对来自不同基类的相同函数实现不同的实现吗?

假设如下:

class A{ virtual void f() = 0; };
class B{ virtual void f() = 0; };
Run Code Online (Sandbox Code Playgroud)

我能以某种方式做到以下几点吗?

class C : public A, public B
{
  virtual void A::f(){ printf("f() from A"); }
  virtual void B::f(){ printf("f() from B"); }
};
Run Code Online (Sandbox Code Playgroud)

所以现在我能做到???

A* pa = new C();
pa->f(); // prints f() from A;
B* pb = (B*)pa;
pb->f(); // prints f() from B;
Run Code Online (Sandbox Code Playgroud)

谢谢!!!

c++ inheritance

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