Programmier-1-mal-1: Klassen

Klassen sind besonders nutzlich, wenn verschiedene Eigenschaften in gebündelter Form gespeichert/verarbeitet werden sollen.
In ihnen können Daten, sowie Methoden abgelegt werden.

Einfache Klasse Mittel

#include <iostream>
#include <string>

using namespace std;

class Animal {
  public:
    Animal(string latinName) {
      this->latinName = latinName;
    }
    Animal(string latinName, string englishName) {
      this->latinName = latinName;
      this->englishName = englishName;
    }
    string getLatinName() {
      return latinName;
    }
    string getEnglishName() {
      return englishName != null ? englishName : latinName;
    }
    virtual bool canFly() {
      return false;
    }
  private:
    string latinName;
    string englishName = null;
};
int main() {
  Animal squirrel = Animal("Sciuridae", "Squirrel");
  std::cout << squirrel.getEnglishName();

  return 0;
}

Subklasse Fortgeschritten

Durch Subklassen lassen sich Klassen mit zusätzlicher Funktionalität erweitern.

class Bird : public Animal {
  public:
    Bird(string latinName, bool ableToFly) : Animal(latinName) {
      this->ableToFly = ableToFly;
    }
    Bird(string latinName, string englishName, bool ableToFly) : Animal(latinName, englishName) {
      this->ableToFly = ableToFly;
    }
    virtual bool canFly() {
      return ableToFly;
    }
  private:
    bool ableToFly;
};
int main() {
  Animal squirrel = Animal("Sciuridae", "Squirrel");
  cout << squirrel.getEnglishName() << "s " << (squirrel.canFly() ? "can" : "cannot") << " fly" << endl;
  Bird penguin = Bird("Spheniscidae", "Penguin", false);
  cout << penguin.getEnglishName() << "s " << (penguin.canFly() ? "can" : "cannot") << " fly" << endl;
  Bird parrot = Bird("Psittaciformes", "Parrot", true);
  cout << parrot.getEnglishName() << "s " << (parrot.canFly() ? "can" : "cannot") << " fly" << endl;

  return 0;
}