Moi! Δημοσ. 11 Απριλίου 2006 Δημοσ. 11 Απριλίου 2006 Hi!ευχαριστω για τη βοηθεια την προηγουμενη φορα και σορρυ απλα τελειωνε η προθεσμια και ειχα ανχωθει!να ρωτησω κατι αλλο τωρα?οταν μασ λεει οτι μια κλκαση εξειδικευει μια αλλη τι σημαινει ακριβως και πως το υλοποιουμε?με πινακα δεικτων στην αρχικη κλαση ή καμια σχεση?thanks a lot!!
georgemarios Δημοσ. 11 Απριλίου 2006 Δημοσ. 11 Απριλίου 2006 αν δε κανω λαθος, "εξειδικευει" ειναι μια αλλη λεξη για το "κληρονομει".
Moi! Δημοσ. 11 Απριλίου 2006 Μέλος Δημοσ. 11 Απριλίου 2006 ξερεις πως γινεται η κληρονομηση απο τη μαμα κλαση στις υποκλασεις?και πως φτιαχνουμε αντιγραφο?αν ναι δωσε ενα π.χ?
Ros_Original Δημοσ. 11 Απριλίου 2006 Δημοσ. 11 Απριλίου 2006 Class X{ //Auth einai h basikh klash (base class) }; Class Y: public X{ //Auth h klash klhronomei apo thn X (subclass) }; To public einai auto pou orizei thn "adeia prosbashs" pou exei h klash Y sthn klash X
georgemarios Δημοσ. 11 Απριλίου 2006 Δημοσ. 11 Απριλίου 2006 ετσι...... "κληρονομει" στα αγγλικα ειναι inherits και "κληρονομικοτητα" ειναι inheritance αν θες να βρεις παραδειγματα στο γουγλ
Moi! Δημοσ. 11 Απριλίου 2006 Μέλος Δημοσ. 11 Απριλίου 2006 ευχαριστω για τη βοηθεια !οταν θελω να φτιαξω ενα αντιγραφο εκτος απο το copy constractor xriazetai kai o operator;
georgemarios Δημοσ. 11 Απριλίου 2006 Δημοσ. 11 Απριλίου 2006 εξαρταται απο την κλαση..... κανονικα ο compiler φτιαχνει default copy constructor και assignment operator ( = ). Ομως αν κανεις initialize καποιον pointer μεσα στον κονστρακτορα σου, θα πρεπει να κανεις override, δηλαδη να ορισεις δικο σου κοπυ κονστρακτορ και οπερεητορ. Πχ, ας υποθεσουμε > class MyClass { MyClass(); ~MyClass(); int *a; } MyClass()::MyClass() { a = new int[10]; } MyClass::~MyClass() { delete [] a; } Στον ctor αρχικοποιουμε τον ποιντερ να δειχνει σε ενα αρραυ 10 ακεραιων (τα λεω λιγο αφελως, αν δε καταλαβαινεις ξαναρωτα) Στον dtor σβηνουμε αυτο το αρραυ. Αρα οσο υπαρχει ενα instance της MyClass θα εχει αρχικοποιημενο το αρραυ του και οταν παυει να υπαρχει τοτε σβηνει και το αρραυ. Ομως κοιτα τι γινεται εδω: > MyClass class1; // ολα καλα //χρηση του default copy ctor, αντιγραφονται τα //δεδομενα της class1 στην class 2 MyClass class2(class1); // σβημουμε την class1, η class2 τωρα τι εχει? delete class1; <---- οκ delete class2; <---- ZONK!!! o pointer a ήδη εχει σβηστει απο τον dtor της class1 αυτο γινεται γιατι δεν αντιγραφονται τα ντατα του αρραυ αλλα η τιμη που εχει η μεταβλητη a η οποια δεν ειναι παρα η διευθυνση μνημης στην οποια βρισκονται τα data. Αρα τοσο η class1 οσο και η class2 δειχνουν ΣΤΟ ΙΔΙΟ ΑΡΡΑΥ. Η λυση σε αυτο θα ηταν να ορισεις τον default copy ctor ως > // allocate memory to hold 10 integers and copy the data of cp.a to a MyClass::MyClass( const MyClass& cp) { a = new int[10]; memcpy(a, cp.a, sizeof(int)*10); } Το ιδιο ισχυει και για τον οπερατορ. Αυτα για να μη τραβας τα μαλλια σου. Γενικα μπορεις να μην ορισεις εσυ copy ctor και = operator, απλα εχε το νου σου.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.