标签: polymorphism

在保持多态属性的同时创建一个超类数组

如果我在运行时填充了一系列Birds,那么如何访问特定于子类的成员方法?

class Bird
{
  public Bird() {}
  public void fly(int x) {
     System.out.println("Flew "+x+" meters");
  }
}
class DumbBird extends Bird
{
   public DumbBird() {super();}
   public void fly(int x) {
     x-=5; //we're dumb
     System.out.println("Flew "+x+" meters");
   }
   public void sing() {
      System.out.println("La la la!");
   }
}
public static void main(String[] args)
{
   Bird[] cage = new Bird[10];
   cage[0] = new Bird();
   cage[1] = new Dumbbird();
   cage[2] = new Sleepybird();
   //.... more bird types

   cage[1].sing(); //is inaccessable because it is of …
Run Code Online (Sandbox Code Playgroud)

java arrays polymorphism arraylist

0
推荐指数
1
解决办法
44
查看次数

通用论证

我想用一个接受类型的所有子类型的方法创建一个Java接口:

interface A{};

interface B{
  void method(A a);
}
Run Code Online (Sandbox Code Playgroud)

我想要实现的是使方法(A a)的实现接受A的所有子类型(如返回类型多态,但带有参数).

这甚至可能吗?

java polymorphism interface

0
推荐指数
1
解决办法
45
查看次数

"虚拟A*someMethod"vs"虚拟类A*someMethod"

我一直试图理解一段代码如下:

class A {
    // some class definition
}

class B {
    public:
        virtual A *someMethod();
        virtual class A *someOtherMethod();
}
Run Code Online (Sandbox Code Playgroud)

我似乎无法理解上的差异(或者如果存在,对于这个问题)之间someMethodsomeOtherMethod-都似乎是虚拟的方法和两者都在课堂上重写,从继承B.

有人会对这个虚拟类语法有所了解吗?

c++ polymorphism

0
推荐指数
1
解决办法
57
查看次数

具有多态数据的容器的常见实现是什么?

假设我创建了一个抽象类Entity,然后创建了它的多个子类,每个子类都有其参数和功能,但是由于Entity共享一个公共接口.到目前为止,这是面向对象编程中最常见的例子.

当我创建一个Entity值向量并告诉它为N个元素保留(确保容量而不调整大小)时,内部会发生什么.如果尺寸可以是任何值,它如何知道尺寸?公共部分是存储在向量中,还是指向子类特定部分的指针?如果是这样,那么指针最终在堆中声明了什么?这对缓存性能非常不利.

最后,这与POD和非POD类型有什么关系吗?

c++ polymorphism vector

0
推荐指数
1
解决办法
46
查看次数

'在构造函数/ Desconstructor的情况下'未定义对vtable的引用'

当我用c ++ 11和发布模式练习clang ++中的多态时,我得到了2个'对vtable的未定义引用'的错误.以下是我的代码的一些部分.

#include <armadillo>
typedef float CHOSENONE;
typedef std::vector<std::vector<CHOSENONE> > fVect2d;
typedef std::vector<CHOSENONE> fVect;
class CfSubSet {
    private:
        fmat m_Data;
        frowvec m_Label;
        int m_NumInstances, m_NumFeatures ;
    public:
        CfSubSet(){
            cout<<"hello! \n" <<endl;
            m_NumInstances = 0;
            m_NumFeatures = 0;
            m_Data.zeros();
            m_Label.zeros();
        }
        CfSubSet(int iNumInstances, int iNumFeatures):m_NumInstances(iNumInstances),m_NumFeatures(iNumFeatures){
            m_Data.resize(iNumInstances,iNumFeatures);
            m_Label.resize(iNumInstances);
        }
        ~CfSubSet(){
            m_Data.reset();
            m_Label.reset();
        }
        inline int getNumInstances(){return m_NumInstances;};
        inline int getNumFeatures(){return m_NumFeatures;};
        inline fmat& getData(){return m_Data;};
        inline fmat& getLabel(){return m_Label;};
};

class CData
{
    protected:
        CfSubSet * m_Test;
        CfSubSet * m_Train; …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism inheritance c++11

0
推荐指数
1
解决办法
676
查看次数

为什么在编译期间出现类型不匹配

我正在声明一个图形(使用JUNG的Graph接口)作为类变量,如下所示:

private Graph<Knoten, Kante> _graph;
Run Code Online (Sandbox Code Playgroud)

我尝试像这样初始化它:

_graph = new DirectedSparseGraph<AttrKnoten, GewKante>();
Run Code Online (Sandbox Code Playgroud)

AttrKnoten扩展了Knoten,GewKante扩展了Kante(他们目前只是标记接口).我在编译期间收到以下错误消息:

"Type mismatch: cannot convert from DirectedSpareGraph<AttrKnoten, GewKante> to Graph<Knoten, Kante>"
Run Code Online (Sandbox Code Playgroud)

这是为什么?有没有其他方法来处理这个问题,但在声明期间省略了参数?

java polymorphism types jung

0
推荐指数
1
解决办法
55
查看次数

使用switch语句的多态性

我们有一些文档类型:

class Document
{
    public void virtual Print()
}

class PDF : Document
{
    public void override Print()
    {
        Console.WriteLine("PDF Printed");
    }
}

class Excel : Document
{
    public void override Print()
    {
        Console.WriteLine("Excel Printed");
    }
}
Run Code Online (Sandbox Code Playgroud)

假设我们有一个文档列表(Document对象),我们在所有文档上调用虚函数Print().

foreach(Document doc in DocumentsList)
{
    doc.Print();
}
Run Code Online (Sandbox Code Playgroud)

我知道多态性是实现它的非常复杂的方法,但我们是否真的可以使用switch语句来做同样的事情?我与一位同事就此进行了长时间的争论,他说这是可能的.是吗?

c# polymorphism inheritance switch-statement

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

编译时间模板限制C++

基本上我有4个班:

  • OverVoid
  • Meta:继承OverVoid
  • 物理:与上述无关
  • 移动:模板类

我希望move的模板接受只有OverVoid类型的对象,即Ove​​rVoid和Meta.

class OverVoid{
public:

    virtual ~OverVoid(){
    };
};

class Meta: public OverVoid{

};

class Physical{
public:
};

template<typename _Ty>
class Move{

};
Run Code Online (Sandbox Code Playgroud)

我想在编译时输入一个错误,我知道有一种方法可以使用boost但我不能使用Boost(与我公司的dev问题)

有任何想法吗?

c++ polymorphism inheritance templates

0
推荐指数
1
解决办法
207
查看次数

java多态创建对象

我需要制作一个程序来运行文本,音频和视频文件,

我创建了一个接口类和三个继承它的类

public interface FileProcess{
    public void process();    
}

public class TextProcess implements FileProcess{ 
    public void process(){System.out.print("Im Text file")};
}

public class VideoProcess implements FileProcess{ 
   public void process(){System.out.print("Im Video file")};
}

public class AudioProcess implements FileProcess{ 
   public void process(){System.out.print("Im Audio file")};
}
Run Code Online (Sandbox Code Playgroud)

我运行从post请求获取File的测试(例如a.jpg或12.txt或aaa.pdf)如何知道要运行的文件进程?换句话说,我怎么知道应该创建哪个对象进程?

java polymorphism

0
推荐指数
1
解决办法
71
查看次数

Visual C++ - 不覆盖虚方法

我有两节课:

template <class T>
class TArray
{
public:
    TArray& operator =(const TArray &array) { return Copy(array); }
    virtual TArray& Copy(const TArray &array) { ... }
}

class TString : public TArray<TCHAR>
{
public:
    TString& Copy(const TString &string) { ... }
}
Run Code Online (Sandbox Code Playgroud)

类也需要构造函数.但是Copy第二类中的方法不会覆盖第一类中的方法.考虑以下代码:

TString a = _T("aaa");
TString b;
b = a;
Run Code Online (Sandbox Code Playgroud)

在第三行程序中输入赋值运算符TArray.在它this,array真的是类型TString.但是当Copy调用时,程序输入方法TArray :: Copy,而不是我预期的TString :: Copy.为什么?

我正在使用Visual Studio 2015 RC,但我正在从Visual Studio 6.0项目移动一些代码,我很确定它已经在其中工作了.改变了什么?

c++ polymorphism inheritance templates visual-studio-2015

0
推荐指数
1
解决办法
45
查看次数