Αντικείμενα και Κλάσεις σε C++
From the ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΚΛΑΣΕΙΣ curriculum
Αντικείμενα και Κλάσεις σε C++
TL;DR
Κλάσεις είναι "σχέδια" που ορίζουν πώς μοιάζουν και συμπεριφέρονται τα δεδομένα σου, ενώ αντικείμενα είναι οι πραγματικές "εκδόσεις" αυτών των σχεδίων. Με τις κλάσεις, μπορείς να οργανώσεις τον κώδικά σου καλύτερα, συνδυάζοντας δεδομένα και λειτουργίες. Αυτό βοηθάει πολύ στη δημιουργία πιο ευέλικτων και εύκολων στη συντήρηση προγραμμάτων.
1. The Mental Model
Φαντάσου τις κλάσεις σαν τη συνταγή για ένα κέικ: περιγράφει όλα τα υλικά και τα βήματα. Ένα αντικείμενο είναι το κέικ που φτιάχνεις ακολουθώντας αυτή τη συνταγή – έχει τα δικά του συγκεκριμένα χαρακτηριστικά, αλλά βασίζεται στη γενική συνταγή.
2. The Core Material
Στην C++, ο αντικειμενοστρεφής προγραμματισμός (OOP) είναι βασικός, και οι κλάσεις (classes) και τα αντικείμενα (objects) είναι οι πυλώνες του.
Τι είναι μια Κλάση;
Μια κλάση είναι ένα "σχέδιο" ή "πρότυπο" για τη δημιουργία αντικειμένων. Περιγράφει τον τύπο των δεδομένων (γνωστές ως ιδιότητες ή μέλη δεδομένων) που θα έχει ένα αντικείμενο, καθώς και τις λειτουργίες (γνωστές ως μέθοδοι ή μέλη συναρτήσεις) που μπορούν να εκτελεστούν σε αυτά τα δεδομένα.
Φαντάσου ότι φτιάχνεις ένα παιχνίδι με πολλά αυτοκίνητα. Αντί να ορίσεις κάθε αυτοκίνητο ξεχωριστά, μπορείς να δημιουργήσεις μια κλάση Αυτοκίνητο που ορίζει ότι κάθε αυτοκίνητο θα έχει χρώμα, ταχύτητα και έναν τρόπο να επιταχύνει.
class Αυτοκίνητο {
public: // Το 'public' σημαίνει ότι μπορείς να έχεις πρόσβαση σε αυτά από έξω
// Ιδιότητες (μέλη δεδομένων)
std::string χρώμα;
int τρέχουσαΤαχύτητα;
// Μέθοδοι (μέλη συναρτήσεις)
void επιτάχυνε(int ποσότητα) {
τρέχουσαΤαχύτητα += ποσότητα;
// Προσοχή, δεν βλέπουμε ακόμα έξοδο, απλά αλλάζουμε την ιδιότητα
}
void εμφάνισεΤαχύτητα() {
std::cout << "Το αυτοκίνητο έχει χρώμα " << χρώμα
<< " και τρέχει με " << τρέχουσαΤαχύτητα << " km/h." << std::endl;
}
}; // Μην ξεχνάς το ελληνικό ερωτηματικό στο τέλος!
Τι είναι ένα Αντικείμενο;
Ένα αντικείμενο είναι μια συγκεκριμένη περίπτωση (instance) μιας κλάσης. Είναι σαν να παίρνεις το σχέδιο της κλάσης και να δημιουργείς ένα πραγματικό πράγμα με βάση αυτό. Κάθε αντικείμενο έχει τις δικές του τιμές για τις ιδιότητές του.
Για παράδειγμα, αν έχεις την κλάση Αυτοκίνητο, μπορείς να δημιουργήσεις πολλά αντικείμενα: αυτοκίνητοΜου, αυτοκίνητοΦίλου, ταξί, κ.λπ. Κάθε ένα από αυτά είναι ένα ξεχωριστό αυτοκίνητο με το δικό του χρώμα και ταχύτητα.
int main() {
// Δημιουργία αντικειμένου (instance) της κλάσης Αυτοκίνητο
Αυτοκίνητο αυτοκίνητοΜου;
// Πρόσβαση στις ιδιότητες και ανάθεση τιμών
αυτοκίνητοΜου.χρώμα = "Μπλε";
αυτοκίνητοΜου.τρέχουσαΤαχύτητα = 0;
// Καλούμε μια μέθοδο του αντικειμένου
αυτοκίνητοΜου.επιτάχυνε(50);
αυτοκίνητοΜου.εμφάνισεΤαχύτητα(); // Έξοδος: Το αυτοκίνητο έχει χρώμα Μπλε και τρέχει με 50 km/h.
Αυτοκίνητο αυτοκίνητοΦίλου;
αυτοκίνητοΦίλου.χρώμα = "Κόκκινο";
αυτοκίνητοΦίλου.τρέχουσαΤαχύτητα = 20;
αυτοκίνητοΦίλου.επιτάχυνε(30);
αυτοκίνητοΦίλου.εμφάνισεΤαχύτητα(); // Έξοδος: Το αυτοκίνητο έχει χρώμα Κόκκινο και τρέχει με 50 km/h.
return 0;
}
Βασικές Έννοιες
graph TD
A["Κλάση (Blueprint)"] --> B["Αντικείμενο 1 (Instance)"];
A --> C["Αντικείμενο 2 (Instance)"];
A --> D["Αντικείμενο 3 (Instance)"];
B --> B1["Ιδιότητες (π.χ., Χρώμα='Μπλε', Ταχύτητα=50)"];
B --> B2["Μέθοδοι (π.χ., επιτάχυνε(), εμφάνισεΤαχύτητα())"];
C --> C1["Ιδιότητες (π.χ., Χρώμα='Κόκκινο', Ταχύτητα=50)"];
C --> C2["Μέθοδοι (π.χ., επιτάχυνε(), εμφάνισεΤαχύτητα())"];
-
Ενθυλάκωση (Encapsulation): Είναι η πρακτική της ομαδοποίησης δεδομένων (ιδιότητες) και των μεθόδων που λειτουργούν πάνω σε αυτά τα δεδομένα σε μία ενιαία μονάδα (την κλάση). Επίσης, χρησιμοποιείται για να κρύψεις την εσωτερική λειτουργία ενός αντικειμένου από τον έξω κόσμο, εκθέτοντας μόνο ό,τι είναι απαραίτητο. Για παράδειγμα, το
τρέχουσαΤαχύτηταθα μπορούσε να είναιprivateκαι να αλλάζει μόνο μέσω της μεθόδουεπιτάχυνε. -
Πρόσβαση (Access Specifiers): Τα
publicκαιprivateκαθορίζουν την ορατότητα των μελών της κλάσης.public: Μπορούν να προσπελαστούν από οπουδήποτε έξω από την κλάση.private: Μπορούν να προσπελαστούν μόνο από μέσα στην κλάση. Αυτό βοηθά στην ενθυλάκωση.
-
Κατασκευαστής (Constructor): Είναι μια ειδική μέθοδος που καλείται αυτόματα όταν δημιουργείται ένα αντικείμενο. Έχει το ίδιο όνομα με την κλάση και χρησιμοποιείται για την αρχικοποίηση των ιδιοτήτων του αντικειμένου.
class Αυτοκίνητο {
public:
std::string χρώμα;
int τρέχουσαΤαχύτητα;
// Κατασκευαστής χωρίς ορίσματα (default constructor)
Αυτοκίνητο() {
χρώμα = "Άγνωστο";
τρέχουσαΤαχύτητα = 0;
std::cout << "Δημιουργήθηκε ένα αυτοκίνητο με default τιμές." << std::endl;
}
// Κατασκευαστής με ορίσματα
Αυτοκίνητο(std::string αρχικόΧρώμα, int αρχικήΤαχύτητα) {
χρώμα = αρχικόΧρώμα;
τρέχουσαΤαχύτητα = αρχικήΤαχύτητα;
std::cout << "Δημιουργήθηκε ένα αυτοκίνητο: " << χρώμα << " με ταχύτητα " << τρέχουσαΤαχύτητα << std::endl;
}
void επιτάχυνε(int ποσότητα) {
τρέχουσαΤαχύτητα += ποσότητα;
}
void εμφάνισεΤαχύτητα() {
std::cout << "Το αυτοκίνητο έχει χρώμα " << χρώμα
<< " και τρέχει με " << τρέχουσαΤαχύτητα << " km/h." << std::endl;
}
};
int main() {
Αυτοκίνητο αυτοκίνητο1; // Κατασκευαστής χωρίς ορίσματα
αυτοκίνητο1.εμφάνισεΤαχύτητα(); // Έξοδος: Το αυτοκίνητο έχει χρώμα Άγνωστο και τρέχει με 0 km/h.
Αυτοκίνητο αυτοκίνητο2("Πράσινο", 30); // Κατασκευαστής με ορίσματα
αυτοκίνητο2.επιτάχυνε(20);
αυτοκίνητο2.εμφάνισεΤαχύτητα(); // Έξοδος: Το αυτοκίνητο έχει χρώμα Πράσινο και τρέχει με 50 km/h.
return 0;
}
3. Worked Example
Ας φτιάξουμε μια κλάση για να αναπαραστήσουμε έναν Φοιτητή. Θέλουμε κάθε φοιτητής να έχει ένα όνομα, ένα επίθετο, έναν αριθμό μητρώου και έναν μέσο όρο βαθμολογίας. Θα δημιουργήσουμε επίσης μεθόδους για να αλλάζουμε τον μέσο όρο και να εμφανίζουμε τις πληροφορίες του φοιτητή.
```cpp
include
include
include // Για μορφοποίηση της δεκαδικής τιμής
class Φοιτητής {
public:
std::string όνομα;
std::string επίθετο;
std::string αριθμόςΜητρώου;
double μέσοςΌρος;
// Κατασκευαστής για εύκολη αρχικοποίηση
Φοιτητής(std::string ον, std::string επ, std::string αρΜητ, double μΟ) {
Frequently asked about Αντικείμενα και Κλάσεις σε C++
More from ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΚΛΑΣΕΙΣ
Get the full ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ-ΚΛΑΣΕΙΣ curriculum
Clone the complete plan to your dashboard for unlimited AI-generated notes, practice quizzes, and a personalised revision schedule.
Create Free Account