如果我在运行时填充了一系列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接口:
interface A{};
interface B{
void method(A a);
}
Run Code Online (Sandbox Code Playgroud)
我想要实现的是使方法(A a)的实现接受A的所有子类型(如返回类型多态,但带有参数).
这甚至可能吗?
我一直试图理解一段代码如下:
class A {
// some class definition
}
class B {
public:
virtual A *someMethod();
virtual class A *someOtherMethod();
}
Run Code Online (Sandbox Code Playgroud)
我似乎无法理解上的差异(或者如果存在,对于这个问题)之间someMethod和someOtherMethod-都似乎是虚拟的方法和两者都在课堂上重写,从继承B.
有人会对这个虚拟类语法有所了解吗?
假设我创建了一个抽象类Entity,然后创建了它的多个子类,每个子类都有其参数和功能,但是由于Entity共享一个公共接口.到目前为止,这是面向对象编程中最常见的例子.
当我创建一个Entity值向量并告诉它为N个元素保留(确保容量而不调整大小)时,内部会发生什么.如果尺寸可以是任何值,它如何知道尺寸?公共部分是存储在向量中,还是指向子类特定部分的指针?如果是这样,那么指针最终在堆中声明了什么?这对缓存性能非常不利.
最后,这与POD和非POD类型有什么关系吗?
当我用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) 我正在声明一个图形(使用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)
这是为什么?有没有其他方法来处理这个问题,但在声明期间省略了参数?
我们有一些文档类型:
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语句来做同样的事情?我与一位同事就此进行了长时间的争论,他说这是可能的.是吗?
基本上我有4个班:
我希望move的模板接受只有OverVoid类型的对象,即OverVoid和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问题)
有任何想法吗?
我需要制作一个程序来运行文本,音频和视频文件,
我创建了一个接口类和三个继承它的类
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)如何知道要运行的文件进程?换句话说,我怎么知道应该创建哪个对象进程?
我有两节课:
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项目移动一些代码,我很确定它已经在其中工作了.改变了什么?