Schnittstellen mit abstrakter Klasse in C++ implementieren

Migel Hewage Nimesha 12 Oktober 2023
  1. Konzept der abstrakten Klasse in C++
  2. Implementieren Sie eine rein virtuelle Funktion in einem Programm mit C++
Schnittstellen mit abstrakter Klasse in C++ implementieren

In Java werden Mehrfachvererbungen mit interface erreicht. interface ist wie ein Template, weil es das notwendige Layout enthält, aber abstrakt ist oder keinen Methodenkörper hat.

Bei C++ sind keine Schnittstellen erforderlich, da C++ im Gegensatz zu Java mehrere Vererbungen unterstützt. In C++ kann die Funktionalität von Schnittstellen mit abstrakten Klassen erreicht werden.

Konzept der abstrakten Klasse in C++

Eine abstrakte Klasse ist eine Klasse mit mindestens einer rein virtuellen Funktion. Es kann nur eine rein virtuelle Funktion deklariert werden, es kann keine Definition dafür geben und sie wird durch die Zuweisung von 0 in der Deklaration deklariert.

Abstrakte Klassen sind sehr nützlich, um einen Code wiederverwendbar und erweiterbar zu machen. Dies liegt daran, dass es möglich ist, viele abgeleitete Klassen zu erstellen, die von der Elternklasse erben, jedoch mit ihren eindeutigen Definitionen.

Außerdem können abstrakte Klassen nicht instanziiert werden.

Beispiel:

class A {
 public:
  virtual void b() = 0;  // function "b" in class "A" is an example of a pure
                         // virtual function
};

Während der Funktionsdeklaration würde der Versuch, die Funktion rein virtuell zu machen, während sie definiert wird, nicht funktionieren.

Implementieren Sie eine rein virtuelle Funktion in einem Programm mit C++

Betrachten Sie ein Beispiel mit shape als Elternklasse. Wenn es um Formen geht, gibt es viele verschiedene Arten davon, und wenn wir Eigenschaften berechnen müssen, beispielsweise die Fläche, unterscheidet sich die Art und Weise, wie wir sie berechnen, von Form zu Form.

Ein Rechteck und Dreieck als abgeleitete Klassen, die von der Elternklasse von Form erben. Dann werden wir die rein virtuelle Funktion mit der erforderlichen Definition für jede Form (Rechteck und Dreieck) in ihrer eigenen abgeleiteten Klasse bereitstellen.

Quellcode:

#include <iostream>

using namespace std;
class Shape {
 protected:
  int length;
  int height;

 public:
  virtual int Area() = 0;

  void getLength() { cin >> length; }

  void getHeight() { cin >> height; }
};

class Rectangle : public Shape {
 public:
  int Area() { return (length * height); }
};

class Triangle : public Shape {
 public:
  int Area() { return (length * height) / 2; }
};

int main() {
  Rectangle rectangle;
  Triangle triangle;

  cout << "Enter the length of the rectangle: ";
  rectangle.getLength();
  cout << "Enter the height of the rectangle: ";
  rectangle.getHeight();
  cout << "Area of the rectangle: " << rectangle.Area() << endl;

  cout << "Enter the length of the triangle: ";
  triangle.getLength();
  cout << "Enter the height of the triangle: ";
  triangle.getHeight();
  cout << "Area of the triangle: " << triangle.Area() << endl;

  return 0;
}

Ausgabe:

Enter the length of the rectangle: 2
Enter the height of the rectangle: 4
Area of the rectangle: 8
Enter the length of the triangle: 4
Enter the height of the triangle: 6
Area of the triangle: 12
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.