Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java C++中抽象类的多重继承_Java_C++_Class_Inheritance_Abstract - Fatal编程技术网

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();

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();
    }
}

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来扩展它。