1

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抽象クラスに相当するものはありますか?

4

4 に答える 4

3

C ++でクラスを抽象化するには、少なくとも1つのメンバー関数が純粋な仮想である必要があります。

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.
};
于 2012-06-15T19:54:27.430 に答える
2

あなたは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;
}
于 2012-06-15T19:52:03.467 に答える
2

C++では多重継承が可能です。したがって、これはC++で許可されています。

また、C ++でのJavaの抽象クラスに相当するものは、少なくとも1つの純粋な virtualメンバー関数を持つクラスです。

したがって、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;
};
于 2012-06-15T19:52:08.460 に答える
-1

継承動作が必要な場合。(コードは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{ 

}
于 2012-06-15T19:56:06.863 に答える