User Tools

Site Tools


cpp:classes

This is an old revision of the document!


Κλάσεις και Αντικείμενα

Όπως και στη Java οι κλάσεις στη C++ δημιουργούν νέους τύπους δεδομένων. Παρακάτω δίνεται το παράδειγμα της κλάσης Rectangle με παράλληλη δημιουργία ενός αντικειμένου της κλάσης αυτής.

Rectangle.cpp
#include <iostream>
using namespace std;
 
class Rectangle {
  private:
    int width, height;
  public:
    void setWidth(int w);
    void setHeight(int h);
    int getWidth() const;
    int getHeight() const;
};
 
void Rectangle::setWidth(int w) { width = w; }
void Rectangle::setHeight(int h) { height = h; }
int Rectangle::getWidth() const { return width; }
int Rectangle::getHeight() const { return height; }
 
int main () {
  Rectangle rect;
  rect.setWidth(5);
  rect.setHeight(6);
  cout << "area: " << rect.getWidth() * rect.getHeight() << endl;
  return 0;
}

Η παραπάνω κλάση διαθέτει τα πεδία τύπου int width, height και τις μεθόδους setWidth, setHeight, getWidth, getHeight. Η κλάση δεν διαθέτει κατασκευαστή. Η δήλωση Rect rect; στη μέθοδο main() δημιουργεί ένα αντικείμενο με κλήση του default κατασκευαστή.

Οι μέθοδοι της κλάσης

Οι μέθοδοι της κλάσης είναι συναρτήσεις οι οποίες έχουν απευθείας πρόσβαση στα πεδία (μεταβλητές) της κλάσης. Οι μέθοδοι ορίζονται μέσα στην κλάση ή ορίζεται το πρότυπο τους μέσα στην κλάση και η υλοποίηση τους εκτός. Από το παρακάτω παράδειγμα παρατηρήστε τους δύο διαφορετικούς τρόπους ορισμού των μεθόδων setWidth και setHeight. H υλοποίηση της setHeight ορίζεται μέσα στη δήλωση της κλάσης, ενώ η υλοποιηση της setWidth έξω από την κλάση.

Rectangle.cpp
#include <iostream>
using namespace std;
 
class Rectangle {
  private:
    int width, height;
  public:
    int getWidth() const;
    int getHeight() const;
    void setWidth(int w);
    void setHeight(int h) { height = h; }
};
 
int Rectangle::getWidth() const { return width;}
int Rectangle::getHeight() const { return height;}
void Rectangle::setWidth(int w) { width = w; }

Οι δύο παραπάνω τρόποι ορισμού μίας μεθόδου της κλάσης είναι ισοδύναμοι με την διαφορά ότι η μέθοδος setHeight ορίζεται ως inline ακόμη και εάν η λέξη inline δεν αναφέρεται ρητά. Για τον ορισμό της μεθόδου setWidth εκτός της κλάσης είναι απαραίτητη η χρήση του ονόματος της κλάσης ακολουθούμενη από το scope operator (Rectangle::setWidth(int w)). Η χρήση του scope operator εξασφαλίζει ότι η μέθοδος ανήκει στην κλάση και δεν αποτελεί αυτόνομη μέθοδο του προγράμματος.

Οι μέθοδοι getWidth και getHeight έχουν το προσδιοριστή const αμέσως μετά τη δήλωση τους. Ο προσδιοριστής const αμέσως μετά τη δήλωση, δηλώνει ότι η συγκεκριμένη συνάρτηση δεν μεταβάλλει το αντικείμενο στο οποίο ανήκει.

cpp/classes.1586333162.txt.gz · Last modified: 2020/04/08 07:06 (external edit)