标签: multiple-inheritance

当多重继承不是一个选项时,如何重用代码?

我想从几个旧的测试类中使用一些方法到我正在构建的新类中.不幸的是,C#不支持多重继承.如何重用这些旧类中的代码?我只是将它们创建为成员对象吗?或者我还有其他选择吗?

c# oop inheritance multiple-inheritance reusability

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

如何在Java中实现多重继承

我正在使用Java中的某个API库.它有一个基类A,以及B和C,它们都扩展了A. B&C提供了类似但不同的功能,所有三个类都在库中.

public abstract class A
{
    virtual foo();
}

public class B extends A {}
public class C extends A {}
Run Code Online (Sandbox Code Playgroud)

我如何获得的元素A,B以及C在我的课?如果我使用的接口来实现的类,有很多重复的代码,内部类不会允许,这样的调用接口,我重写现有的方法A,B以及C将被保留.

如何在Java中实现多重继承?

编辑:感谢编辑George,现在更清楚了,忘了提一个关键要求:我的类必须以A为基础,以便它们可以通过平台API进行管理.

java multiple-inheritance

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

@interface可以有多个课程吗?

可能重复:
Objective-C多重继承

在我的应用程序,我需要添加SideSwipeTableViewControllerPullRefreshTableViewControllerViewController.h.但是,出于某种原因,当我尝试构建应用程序时,它会给我一个错误.

这是代码:

@interface ViewController : SideSwipeTableViewController, PullRefreshTableViewController  {

    ...

}
Run Code Online (Sandbox Code Playgroud)

它可以在任何一个进入,但不是两个都有效.我想知道的是:有没有办法成功实现这两个类?在此先感谢,我对这个问题道歉:我对Objective-C还有点新意.

xcode interface class objective-c multiple-inheritance

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

为什么多次继承具有不同签名的方法不明确?

如果我继承了具有相同名称但来自不同基类的不同签名的函数,则尝试调用该函数会生成错误,声称该调用不明确.单个基类中的相同函数不会生成错误.为什么是这样?

第一个案例,http://ideone.com/calH4Q

#include <iostream>
using namespace std;

struct Base1
{
    void Foo(double param)
    {
        cout << "Base1::Foo(double)" << endl;
    }
};

struct Base2
{
    void Foo(int param)
    {
        cout << "Base2::Foo(int)" << endl;
    }
};

struct Derived : public Base1, public Base2
{
};

int main(int argc, char **argv)
{
    Derived d;
    d.Foo(1.2);
    return 1;
}

prog.cpp: In function ‘int main(int, char**)’:
prog.cpp:27:7: error: request for member ‘Foo’ is ambiguous
prog.cpp:14:10: error: candidates are: void Base2::Foo(int)
prog.cpp:6:10: error:                 void …
Run Code Online (Sandbox Code Playgroud)

c++ multiple-inheritance ambiguous

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

多层继承在C++中是否有意义?

我使用下面的3层继承设计:

class connect_info {
  // these members
};

class vertex : public connect_info {
  // ...
};

// user-defined struct
class algo_vertex: public vertex {
  // ...
};
Run Code Online (Sandbox Code Playgroud)

connect_info类的成员(我these members在这个问题中称它)仅在vertex课堂上使用.但为了保持vertex类的语义清晰,我必须分开these members到另一个基类(connect_info).

这里产生的问题:

  1. 如何从用户定义的类中隐藏这些成员?(protected并且private现在都没用.如果没有connect_info基类,private可以正常工作)
  2. 多层继承设计在任何情况下都有意义吗?
  3. 虚拟解构函数可以在多层继承的情况下很好地工作吗?

c++ oop inheritance class multiple-inheritance

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

在多个类型的特征实例中键入方差

考虑

trait Foo[+A, +B]

trait Foo1[+A] extends Foo[A, Nothing]

trait Foo2[+B] extends Foo[Nothing, B]
Run Code Online (Sandbox Code Playgroud)

new Foo1[String] with Foo2[Nothing] 作品.

new Foo1[Nothing] with Foo2[String] 作品.

new Foo1[String] with Foo2[String] 不会:

error: illegal inheritance;
<$anon: Foo1[String] with Foo2[String]> inherits different type instances of trait Foo:
Foo[Nothing,String] and Foo[String,Nothing]
          new Foo1[String] with Foo2[String]
              ^
Run Code Online (Sandbox Code Playgroud)

似乎在第一种情况下,实例是一个子类型Foo[String, Nothing].

同样,似乎在第二种情况下,实例应该是子类型Foo[String, String].

这两个之间有什么区别只会导致一个编译?

generics scala multiple-inheritance covariance traits

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

C++来自接口和转换的多重继承

如果我有一个继承自一个接口的类(下面)和 wxPane

class iClassA
{
public:
    virtual ~iClassA() {}
    virtual bool FuncA() = 0;
};
Run Code Online (Sandbox Code Playgroud)

沈志南:

class ConcereteClass : public iClassA, wxPane
{
public:
    bool FuncA();
};
Run Code Online (Sandbox Code Playgroud)

有一个包含我std::vector的类型是否可以接受或者在铸造时会感到困惑?iClassA *ConcereteClassvmaps

c++ inheritance multiple-inheritance

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

通过具有多重继承的类对nullptr进行upcast

问题是,对具有多重继承的类的第二个超类的nullptr的隐式转换(至少在LLVM 7.0.2中)在调整中应用于nullptr.指针现在不再为null(如果在超类的方法中执行空检查)可能导致崩溃(我猜技术上是未定义的行为).

这是一个最小的例子:

#include <iostream>

inline bool pointerIsNotNull(const void* ptr) { return ptr != nullptr; }

class IntValue {
    public:
        IntValue() { }
        int getIntValue() { return pointerIsNotNull(this) ? value : 0; }
    private:
        int value;
};

static const char* nullptrChar = "nullptr";

class CharValue {
    public:
        CharValue() { }
        const char* getCharValue() { return pointerIsNotNull(this) ? value : nullptrChar; }
    private:
        char* value;
};

class Foo : public IntValue, public CharValue {
    public:
        Foo() { }
        double getDoubleValue() { …
Run Code Online (Sandbox Code Playgroud)

c++ multiple-inheritance nullptr

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

如何在Python中找到继承变量的来源?

如果您有多个继承层并且知道存在特定变量,是否有办法追溯到变量的起源位置?无需通过查看每个文件和类来向后导航.可能会调用某种功能吗?例:

parent.py

class parent(object):
    def __init__(self):
        findMe = "Here I am!"
Run Code Online (Sandbox Code Playgroud)

child.py

from parent import parent
class child(parent):
    pass
Run Code Online (Sandbox Code Playgroud)

grandson.py

from child import child
class grandson(child):
    def printVar(self):
        print self.findMe
Run Code Online (Sandbox Code Playgroud)

尝试通过函数调用找到findMe变量的来源.

python variables class multiple-inheritance

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

Python - 如何使这个多重继承工作?

我正在开发一个涉及PyQt5的项目,我正在努力管理小部件之间的继承.

我有一个QWidget屏幕继承了QtWidgets.QWidget和另一个由QtDesigner生成的类.它读起来像这样:

class a(QtWidgets.QWidget, Ui_a):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.setupUi(self)

        <some attributes>

    <some functions
Run Code Online (Sandbox Code Playgroud)

在这里,我继承了Ui_a一个存储在生成文件中的单独类,我可以调用setupUi(一种方法Ui_a).

我现在想要创建另一个类b,它也是一个需要显示的QWidget.该类b需要使用类中的一些函数和属性a.我可以轻松地复制粘贴所需的东西,但这是不好的做法,所以我正在寻找一个更整洁的解决方案.如果我做代码:

class b(QtWidgets.QWidget, Ui_b, a):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init(self, parent)
        self.setupUi(self)
Run Code Online (Sandbox Code Playgroud)

然后崩溃并显示一条错误消息,指出它无法创建一致的方法解析顺序.

我的第一个问题是 - 我知道我需要调用类的init方法,a因为a那里创建了属性,但我不知道如何.

我的第二个问题是 - 如何修复此MRO错误并成功创建b可以使用其a属性和函数的新类?

python class pyqt multiple-inheritance

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