0

我想创建一个在 Java 中实现自己的一些方法的接口(但该语言不允许这样做,如下所示):

//Java-style pseudo-code
public interface Square {
    //Implement a method in the interface itself
    public int getSize(){//this can't be done in Java; can it be done in C++?
        //inherited by every class that implements getWidth()
        //and getHeight()       
        return getWidth()*getHeight();
    }
    public int getHeight();
    public int getWidth();
}

//again, this is Java-style psuedocode
public class Square1 implements Square{

    //getSize should return this.getWidth()*this.getHeight(), as implemented below

    public int getHeight(){
        //method body goes here
    }

    public int getWidth{
        //method body goes here
    }
}

是否有可能在 C++ 中创建一个等效的接口来实现它自己的一些方法?

4

4 回答 4

7

使用abstract class

public abstract class Square {

    public abstract int getHeight();

    public abstract int getWidth();

    public int getSize() {
        return getWidth() * getHeight();
    }
}
于 2012-06-08T00:19:19.517 回答
5

必须是接口吗?也许抽象类会更好。

public abstract class Square {
    public int getSize() {
        return getWidth() * getHeight();
    }

    //no body in abstract methods
    public abstract int getHeight();
    public abstract int getWidth();
}

public class Square1 extends Square {

    public int getHeight() {
        return 1;
    }

    public int getWidth() {
        return 1;
    }
}
于 2012-06-08T00:14:13.687 回答
1

要回答您的其他问题,是的,可以通过使用virtual关键字在 C++ 中完成。据我所知,它是 C++ 中多态的主要方法。

这套教程很棒;如果您想了解有关 C/C++ 的更多信息,我建议您阅读完整的内容。

于 2012-06-08T01:36:57.810 回答
1

我认为您将接口与抽象类混为一谈:

接口描述了所有实现类必须遵守的契约。它基本上是一个方法列表(并且,重要的是,它们应该返回什么、它们应该如何表现等的文档。

请注意,所有方法都没有主体。接口不这样做。但是,您可以在接口中定义静态最终常量。

public interface Shape
{
  /**
   * returns the area of the shape
   * throws NullPointerException if either the height or width of the shape is null
   */
  int getSize();
  /**
   * returns the height of the shape
   */
  int getHeight();
  /**
   * returns the width of the shape
   */
  int getWidth();
}

抽象类实现了一些方法,但不是全部。(从技术上讲,抽象类可以实现所有方法,但这不是一个很好的例子)。目的是扩展类将实现抽象方法。

/*
 * A quadrilateral is a 4 sided object.
 * This object has 4 sides with 90' angles i.e. a Square or a Rectangle
 */
public abstract class Quadrilateral90 implements Shape
{
  public int getSize()
  {
    return getHeight() * getWidth();
  }
  public abstract int getHeight();  // this line can be omitted
  public abstract int getWidth();  // this line can be omitted
}

最后,扩展对象实现了抽象父类和接口中的所有剩余方法。请注意,这里没有实现 getSize()(尽管您可以根据需要覆盖它)。

/*
 * The "implements Shape" part may be redundant here as it is declared in the parent,
 * but it aids in readability, especially if you later have to do some refactoring.
 */
public class Square extends Quadrilateral90 implements Shape
{
  public int getHeight()
  {
    // method body goes here
  }
  public int getWidth()
  {
    // method body goes here
  }
}
于 2012-06-08T10:38:57.997 回答