- Η ιεραρχία των κλάσεων εκφράζεται στη C++ με τον ορισμό μιας κλάσης που
είναι υποκλάση (subclass) μιας άλλης κλάσης (που
ονομάζεται βασική κλάση (base class)).
- Η σύνταξη για τον ορισμό αυτό είναι της μορφής:
class υποκλάση : public βασική_κλάση { ...
- Κάθε υποκλάση κληρονομεί (inherits) τις μεθόδους
και τις ιδιότητες που έχουν οριστεί ως public στη βασική κλάση.
- Η υποκλάση δεν έχει πρόσβαση στις μεθόδους και τις ιδιότητες
που έχουν οριστεί ως private στη βασική κλάση.
- Η υποκλάση μπορεί να ορίσει νέες ιδιότητες και μεθόδους και να
αντικαταστήσει ιδιότητες και μεθόδους που έχει ορίσει η βασική κλάση.
- Παράδειγμα:
class shape {
private:
int x, y; // Position
public:
void setposition(int x, int y);
};
void shape::setposition(int x, int y)
{
shape::x = x;
shape::y = y;
}
class circle : public shape {
private:
int radius;
public:
void setradius(int r);
};
class rectangle : public shape {
private:
int height, width;
public:
void setdimensions(int h, int w);
};
main()
{
circle c;
rectangle r;
r.setposition(1, 2);
c.setposition(3, 4);
}
- Μπορούμε να ορίσουμε μια άλλη κατηγορία μεθόδων και ιδιοτήτων
με όνομα protected. Αυτές είναι προσβάσιμες από τις υποκλάσεις της
κλάσης μας, αλλά όχι από άλλες συναρτήσεις.
Παράδειγμα:
class shape {
private:
int x, y;
protected:
int getx(); // Can be used by subclasses
int gety();
public:
void setposition(int x, int y);
}
- Ένας δείκτης σε μια υποκλάση μπορεί αυτόματα να μετατραπεί σε
δείκτη στη βασική της κλάση. Το αντίθετο δεν επιτρέπεται.
Παράδειγμα:
main()
{
circle c;
rectangle r;
shape *sp;
r.setposition(1, 2);
c.setposition(3, 4);
sp = &c; // Implici conversion
sp->setposition(3, 3); // Set the position of c
}
- Μια κλάση μπορεί να δηλωθεί με
πολλαπλή κληρονομικότητα (multiple inheritance) με
τη σύνταξη:
class υποκλάση : public βασική_κλάση1, public βασική_κλάση2, ... { ...
Στην περίπτωση αυτή η κλάση κληρονομεί τα μέλη και τις μεθόδους όλων
των βασικών κλάσεων που δηλώθηκαν.