alexc Δημοσ. 23 Μαΐου 2013 Δημοσ. 23 Μαΐου 2013 Καλησπέρα έχω μια άσκηση εδώ και απραθέτω την εκφώνηση και την λύση μου: Εκφώνηση: α) Να υλοποιηθεί μια κλάση με όνομα Disk η οποία να υλοποιεί την έννοια του δίσκου. Ένας δίσκος θα πρέπει να έχει μία περιγραφή (συμβολοσειρά μήκους 30) και μία ιδιότητα που να δείχνει αν επιτρέπονται οι εγγραφές πάνω του ή όχι (write protect/enable). Η κλάση θα πρέπει να περιλαμβάνει: 2 δομητές (με 0 και 2 ορίσματα αντίστοιχα), μία μέθοδο slide που θα αλλάζει την κατάσταση εγγραφής (από «enable» σε «protect» και αντίστροφα) και μία μέθοδο show() που θα εμφανίζει στην οθόνη την περιγραφή και την κατάσταση εγγραφής. Σημ. Ο δομητής με τα 2 ορίσματα θα αρχικοποιεί τις ιδιότητες του αντικειμένου στις τιμές που δέχεται ως ορίσματα, ενώ ο δομητής χωρίς ορίσματα θα αρχικοποιεί την περιγραφή στην κενή συμβολοσειρά και την ιδιότητα εγγραφής στο «δεν επιτρέπονται». Να γραφεί συνάρτηση main() που θα δημιουργεί 2 αντικείμενα της κλάσης Disk ως εξής: 1) ένα στατικό αντικείμενο με περιγραφή «DOS» που δεν θα επιτρέπει εγγραφές. 2) ένα δυναμικό αντικείμενο (με χρήση δείκτη και τελεστή new) με περιγραφή «Empty» που θα επιτρέπει εγγραφές. Η main στη συνέχεια θα αλλάζει την κατάσταση εγγραφής των δύο δίσκων και θα τυπώνει την περιγραφή και την κατάσταση εγγραφής των αντικειμένων (show). β) Με βάση την Disk να δημιουργηθεί κλάση MagneticDisk η οποία θα έχει ως επιπλέον ιδιότητες την χωρητικότητα (σε Mbyte) και το πλήθος των δεδομένων στον δίσκο (σε Mbyte). Για την κλάση να δημιουργηθούν: 1) ένας δομητής που θα δέχεται 4 ορίσματα (περιγραφή, κατάσταση εγγραφής, χωρητικότητα, δεδομένα) 2) μία συνάρτηση show() η οποία θα καλεί την show της κλάσης βάσης και αμέσως μετά θα εμφανίζει τον ελεύθερο χώρο του δίσκου ------------------------------------------------------ Και ο κώδικας μου: #include <iostream> #include <cstring> using namespace std; class Disk { private: char descr[50]; bool write; public: Disk() { write=false; strcpy(descr,""); } Disk(char s[50],bool a) { strcpy(descr,s); write=a; } void slide() { if (write) write=false; else write=true; } virtual void show() { cout<<"Description: "<<descr<<endl; if (write) cout<<"Can be written."<<endl; else cout<<"Can't be written."<<endl; } }; class MagneticDisk: public Disk { private: int size; int written_data; public: MagneticDisk(char s[50],bool a,int siz,int w_d):Disk(s,a) { size=siz; written_data=w_d; } void show() { Disk::show(); cout<<"Free space: "<<size-written_data; } }; int main() { Disk d1("DOS",false); MagneticDisk md("Trap music",true,220,100); d1.show(); md.show(); } Ουσιαστικά το πρόβλημα μου είναι εκεί που ζητάει δυναμικό αντικείμενο και να του δώσουμε αρχικές τιμές στα πεδία του χωρίς όμως συναρτήσεις Set... Υπάρχει κάποιος τρόπος να κάνω new και μετά να καλέσω τον constructor η είναι κουφό?? Σας ευχαριστώ εκ των προτέρων..
MitsakosGR Δημοσ. 23 Μαΐου 2013 Δημοσ. 23 Μαΐου 2013 MagneticDisk * md = new MagenticDisk("Trap music",true,220,100); Όταν καλείς την new κάνεις δέσμευση μνήμης και καλείς τον constructor.
alexc Δημοσ. 24 Μαΐου 2013 Μέλος Δημοσ. 24 Μαΐου 2013 ΑΑ τόσο απλό ήταν πως δεν μου ήρθε κάτι τέτοιο Σε ευχαριστώ πολύ!!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα