Java C++中抽象类的多重继承
Java不支持抽象类的多重继承,但我正试图在C++中实现这一点:Java C++中抽象类的多重继承,java,c++,class,inheritance,abstract,Java,C++,Class,Inheritance,Abstract,Java不支持抽象类的多重继承,但我正试图在C++中实现这一点: //this is Java-style pseudocode public abstract class Rectangle{ public abstract double getHeight(); public abstract double getWidth(); public double getHeight(){ return getWidth()*getHeight();
//this is Java-style pseudocode
public abstract class Rectangle{
public abstract double getHeight();
public abstract double getWidth();
public double getHeight(){
return getWidth()*getHeight();
}
}
public abstract class Container{
public abstract void printTypes();
public abstract void printEachElement();
public void printContainerStuff(){
System.out.print("Has the types: ");
printTypes();
System.out.print("List of elements: ");
printEachElement();
}
}
public abstract class Array extends Rectangle, Container{ //this can't be done in Java, but what about C++?
}
在C++中是否有一个等价于java抽象类的东西,可以使它成为可能?
我想你正在寻找java接口。public abstract class Rectangle{
public abstract double getHeight();
public abstract double getWidth();
public double getHeight(){
return getWidth()*getHeight();
}
}
public interface Container {
public void printTypes();
public void printEachElement();
}
public abstract class Array extends Rectangle implements Container {
}
C++中可以有多重继承。您还可以使用类似Java的接口和纯虚拟方法
class Container {
public:
virtual void printTypes() = 0;
virtual void printEachElement() = 0;
}
我认为您正在寻找Java接口
public abstract class Rectangle{
public abstract double getHeight();
public abstract double getWidth();
public double getHeight(){
return getWidth()*getHeight();
}
}
public interface Container {
public void printTypes();
public void printEachElement();
}
public abstract class Array extends Rectangle implements Container {
}
C++中可以有多重继承。您还可以使用类似Java的接口和纯虚拟方法
class Container {
public:
virtual void printTypes() = 0;
virtual void printEachElement() = 0;
}
C++允许多重继承。所以C++中允许使用。
和C++中的java抽象类的等价类是一个至少有一个纯虚成员函数的类。 < C++中的java代码的等价物是:
class Rectangle
{
public:
virtual double getHeight() = 0;
virtual double getWidth() = 0;
double getHeight(){
return getWidth()*getHeight();
}
};
class Container(){
public:
virtual void printTypes() = 0;
virtual void printEachElement() =0;
};
C++允许多重继承。所以C++中允许使用。
和C++中的java抽象类的等价类是一个至少有一个纯虚成员函数的类。 < C++中的java代码的等价物是:
class Rectangle
{
public:
virtual double getHeight() = 0;
virtual double getWidth() = 0;
double getHeight(){
return getWidth()*getHeight();
}
};
class Container(){
public:
virtual void printTypes() = 0;
virtual void printEachElement() =0;
};
在C++中实现类抽象至少一个成员函数必须是纯虚的:
class X
{
public:
virtual void f() = 0;
};
如前所述,在C++中允许多重继承:
class Rectangle
{
public:
virtual double getHeight() = 0;
virtual double getWidth() = 0;
double getHeight(){
return getWidth()*getHeight();
}
};
class Container
{
public:
virtual void printTypes() = 0;
virtual void printEachElement() = 0;
};
class Array: public Rectangle, public Container
{
// If the pure virtual member functions in the base classes
// are not implemented then this class is also abstract.
};
在C++中实现类抽象至少一个成员函数必须是纯虚的:
class X
{
public:
virtual void f() = 0;
};
如前所述,在C++中允许多重继承:
class Rectangle
{
public:
virtual double getHeight() = 0;
virtual double getWidth() = 0;
double getHeight(){
return getWidth()*getHeight();
}
};
class Container
{
public:
virtual void printTypes() = 0;
virtual void printEachElement() = 0;
};
class Array: public Rectangle, public Container
{
// If the pure virtual member functions in the base classes
// are not implemented then this class is also abstract.
};
如果您想要继承行为。代码是用Java编写的,您可以在c中尝试类似的东西++
abstract class Rectangle{
public abstract double getHeight();
public abstract double getWidth();
public double getHeight(){
return getWidth()*getHeight();
}
}
abstract class Container extends Rectangle{
public abstract void printTypes();
public abstract void printEachElement();
}
abstract class Array extends Container{
}
如果您想要继承行为。代码是用Java编写的,您可以在c中尝试类似的东西++
abstract class Rectangle{
public abstract double getHeight();
public abstract double getWidth();
public double getHeight(){
return getWidth()*getHeight();
}
}
abstract class Container extends Rectangle{
public abstract void printTypes();
public abstract void printEachElement();
}
abstract class Array extends Container{
}
抱歉,我编辑了您的答案,然后才注意到hmjd已经提供了您缺少的信息。我滚动,我不知道这是不是做的事情……C++中的纯虚函数像java中的抽象方法一样吗?也可以在一个类中创建方法,而不需要在java中创建类的实例,比如静态方法?您还可以拥有静态成员函数。搜索它。抱歉,我编辑了你的答案,然后才注意到hmjd已经提供了你的答案中缺少的信息。我滚动,我不知道这是不是做的事情……C++中的纯虚函数像java中的抽象方法一样吗?也可以在一个类中创建方法,而不需要在java中创建类的实例,比如静态方法?您还可以拥有静态成员函数。搜索它。实际上我在寻找抽象类的多重继承——在爪哇这是不可能的,但是在C++中我认为是可能的。接口不能实现它们自己的方法,但抽象类可以。@AndersonGreen-你在所有方面都是正确的。在Java中,可以实现多个接口,但如果不指定任何其他内容,则只能从一个类对象继承。在C++中,你可以从任意数量的类继承,抽象或不。实际上我在寻找抽象类的多重继承——在爪哇这是不可能的,但是在C++中,我认为是可能的。接口不能实现它们自己的方法,但抽象类可以。@AndersonGreen-你在所有方面都是正确的。在Java中,可以实现多个接口,但如果不指定任何其他内容,则只能从一个类对象继承。在C++中,可以从任意数量的类继承,抽象或不。我不希望容器类扩展矩形。我想要其他非矩形类,例如,一个三维arraylist来扩展它,我不想要容器类扩展矩形。我还需要其他非矩形类,例如,一个三维arraylist来扩展它。