g1wrg0s
Επιφανές μέλος


Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος


{
#include<iostream>
#include<string.h>
using namespace std;
class book
{
protected:
char name[30];
public:
virtual void show(){cout<<"paramithia."<<endl;}
};
class book1:public book
{
public:
book1(char n[]){strcpy(name,n);}
void show(){cout<<name<<endl;}
};
class book2:public book
{
public:
book2(char n[]){strcpy(name,n);}
void show(){cout<<name<<endl;}
};
int main()
{
char name1[]="Kokkinoskoyfitsa";
char name2[]="Ta tria gourounakia";
book1 b1(name1);
book2 b2(name2);
book *ptr[2];
ptr[0]=&b1;
ptr[1]=&b2;
for(int i=0;i<2;i++)
ptr[i]->show();
return 0;
}
Αν μια συνάρτηση δηλωθεί ως virtual στην βασική κλάση τότε ένας δείκτης της βασικής κλασης μπορεί να καλέσει τις συναρτήσεις-μέλη των παράγωγων κλάσεων.
Στο παράδειγμα η show ειναι εικονική.Ο πίνακας δεικτών ptr ειναι της βασικής κλάσης οπου ptr[0] δείχνει στο αντικείμενο b1 και ptr[1] στο b2.Αν η show δεν είχε δηλώθει ως εικονική ο ptr δεν θα μπορούσε να καλέσει την show των b1 και b2 ,θα καλούσε την δικία του show και θα εκτύπωνε
paramithia
paramithia
ενώ τώρα μπορεί και εκτυπώνει:
Kokkinoskoyfitsa
Ta tria gourounakia
}
αλλιώς
ξαναρώτα;
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
g1wrg0s
Επιφανές μέλος


book *ptr[2]; Δεν θα επρεπε να καθε στοιχειο οτον πινακα να δειχνει σε ενα τυπο δεδομενων book και οχι book1 ή book2 ;
2) Θα πρεπει συναρτησεις σαν την show() να εχουν ιδιο τυπο και ονομα ή πρεπει και η λιστα παραμετρων να ειναι ιδια;
3) Όταν οι συναρτήσεις (δεν) είναι virtual ένας δείκτης της ΠΑΡΑΓΟΥΣΑΣ κλασης θα καλεσει αναγκαστικα την show της book1 (ή 2)
ή θα υπαρξει προβλημα . Αν ισχυει ο παραπανω ισχυρισμος τοτε για την show() της βασης πρεπει να γραψω *ptr_to_book1.book::show();
Ευχαριστω και παλι
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος


book *ptr[2]; Δεν θα επρεπε να καθε στοιχειο οτον πινακα να δειχνει σε ενα τυπο δεδομενων book και οχι book1 ή book2 ;
2) Θα πρεπει συναρτησεις σαν την show() να εχουν ιδιο τυπο και ονομα ή πρεπει και η λιστα παραμετρων να ειναι ιδια;
3) Όταν οι συναρτήσεις (δεν) είναι virtual ένας δείκτης της ΠΑΡΑΓΟΥΣΑΣ κλασης θα καλεσει αναγκαστικα την show της book1 (ή 2)
ή θα υπαρξει προβλημα . Αν ισχυει ο παραπανω ισχυρισμος τοτε για την show() της βασης πρεπει να γραψω *ptr_to_book1.book::show();
1.Αυτό είναι το νόημα των εικονικών συναρτήσεων:ο δείκτης της βασικής κλάσης book να μπορεί να καλεί τις συναρτήσεις show των άλλων κλάσεων ανάλογα με το τι τύπου αντικείμενο του έχει εκχωρηθεί. Δηλαδή στο ptr[0] έχει εκχωρηθει τύπος δεδομένων book1 άρα το ptr[0]->show() θα καλέσει την show της κλάσης book1. Αν κάθε στοιχειο του πίνακα δείχνει σε ενα τύπο δεδομένων book δεν θα έχει νόημα.Εννοειτε πως μπορεί να συμβαίνει και αυτό:
#include<iostream>
#include<string.h>
using namespace std;
class book
{
protected:
char name[30];
public:
book(char n[]){strcpy(name,n);}
book(){};
virtual void show(){cout<<name<<" paramithia"<<endl;}
};
class book1:public book
{
public:
book1(char n[]){strcpy(name,n);}
void show(){cout<<name<<endl;}
};
class book2:public book
{
public:
book2(char n[]){strcpy(name,n);}
void show(){cout<<name<<endl;}
};
int main()
{
char name1[]="Kokkinoskoyfitsa";
char name2[]="Ta tria gourounakia";
char name3[]="paramithenia";
book1 b1(name1);
book2 b2(name2);
book *ptr[2],b(name3);
ptr[0]=&b1;
ptr[1]=&b;
for(int i=0;i<2;i++)
ptr[i]->show();
return 0;
}
2.Πρέπει να είναι ίδιου τύπου και να έχει ίδιο τύπο και αριθμό παραμέτρων.
3.Μόνο ένας δείκτης της βασικής κλάσης μπορεί να καλέι συναρτήσεις άλλων κλάσεων αν είναι φυσικά εικονικές.Αν ο δείκτης της παράγωγης κλασης δείχνει σε δικό της αντικείμενο θα καλέσει την δικία της show αλλιως θα δημιουργηθεί σφάλμα.
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
kiriazispao4ever
Δραστήριο μέλος


Ρωτάς ή δηλώνεις;
Με float ή double, ανάλογα τι "ακρίβεια" θες.![]()
αχαχα ξέχασα να βάλω ερωτηματικο

ευχαριστώωω

ααα Να ρωτήσω και κατι τελευταίο...που ούτε στην python to εχω λύσει

πως να γράφω και να μου εμφανίζει τα ελληνικά?

Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος


μετά πήγαινε ιδιότητες στο cmd (πάνω αριστερά)και επέλεξε γραμματοσειρά lucida console.
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
g1wrg0s
Επιφανές μέλος


1.Αυτό είναι το νόημα των εικονικών συναρτήσεων:ο δείκτης της βασικής κλάσης book να μπορεί να καλεί τις συναρτήσεις show των άλλων κλάσεων ανάλογα με το τι τύπου αντικείμενο του έχει εκχωρηθεί.
Εχω καταλαβει οτι εφοσον οι book,book1 εχουν σχεση βασης-παραγωγης μου δινεται η δυνατοτητα να φτιαξω την ιδια συναρτηση (εκτος το body που μπορω να διαφοροποιησω) και οταν ενας δεικτης προσπελασει την book ψαχνοντας την show(), τοτε θα κοιτάξει-υπερυσχισει η show της book1. Με αλλα λογια ενας δικτης δειχνει στην book και αν οντως υπαρχει show() στη book1 τοτε θα την καλεσει. Ετσι πως ειναι ο κωδικας ουτως η αλλως θα επρεπε νομιζω ΠΑΝΤΑ να υπερισχυει η show() της book1 , κατι το οποιο δεν συμβαινει.
Σεναριο 2: μηπως με την κληρονομικοτητα επι της ουσιας μεσα στο body της book1 υπαρχουν 2 show() και για να ξερει ο υπολ. ποια θα καλεσει βαζω το virtual;
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
kiriazispao4ever
Δραστήριο μέλος


γιατι όπου και να το βάλω στο κώδικα δεν το αναγνωρίζει...
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος


Και εγώ τώρα μαθαίνω δεν ξέρω 100%.αν ξέρει καλύτερα κάποιος ας με διορθώσει.
στην αρχή του κώδικα?
γιατι όπου και να το βάλω στο κώδικα δεν το αναγνωρίζει...
στην αρχή της
main()
{
system("chcp 1253");
}
κάνε include και το <stdlib.h>.Εκεί έχει δηλωθεί η system.
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
kiriazispao4ever
Δραστήριο μέλος


στην αρχή της
main()
{
system("chcp 1253");
}
κάνε include και το <stdlib.h>.Εκεί έχει δηλωθεί η system.
Δούλεψεε ..ευχαριστωωω

Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
kiriazispao4ever
Δραστήριο μέλος


#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;
main() {
system("chcp 1253");
double a;
double b;
double c;
double D;
cout<<"ΔΩΣΕ ΣΥΝΤΕΛΕΣΤΗ Χ^2 :";
cin>> a;
cout<<"ΔΩΣΕ ΣΥΝΤΕΛΕΣΤΗ Χ:";
cin>> b;
cout<<"ΔΩΣΕ ΣΤΑΘΕΡΟ ΟΡΟ :";
cin>> c;
D = (b*b)-(4*(a*c));
cout << "D= " <<D ;
if(D>0) {
cout<<"Η ΕΞΙΣΩΣΗ ΕΧΕΙ ΔΥΟ ΛΥΣΕΙΣ\n\n x1= "<< (-b+sqrt(D))/(2*a)<<" \n x2= "<< (-b-sqrt(D))/(2*a);
}
else if (D<0) {
cout<<"\n\nΗ ΕΞΙΣΩΣΗ ΟΤΑΝ Η ΔΙΑΚΡΙΝΟΥΣΑ ΕΙΝΑΙ 0,ΔΕΝ ΕΧΕΙ ΛΥΣΕΙΣ.\nEINAI AΔΥΝΑΤΗ!\n\n";
}
else if (D==0) {
cout<<"\n\nΗ ΕΞΙΣΩΣΗ ΕΧΕΙ ΜΙΑ ΔΙΠΛΗ ΛΥΣΗ:\n\nχ= "<<(-b)/(2*a);
}
}
μπορείτε να μου εξηγήσετε ποιο ειναι το λάθος μου?
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Γιώργος
Τιμώμενο Μέλος


Κατ' αρχάς το ότι δεν βάζεις στοίχιση (indents). Σου επεξεργάστηκα το μήνυμά σου, ρίξε μία ματιά πώς είναι καλό να παραθέτεις κώδικα. Να χρησιμοποιείς [code]...[/code] tags και στοίχιση, ώστε να διαβάζεται εύκολα. Ευτυχώς εδώ είναι απλός, αλλά σε πιο περίπλοκα παραδείγματα μην περιμένεις να κάτσει κάποιος να διαβάσει κώδικα χωρίς στοίχιση.μπορείτε να μου εξηγήσετε ποιο ειναι το λάθος μου?

Επίσης, το πρόγραμμά σου μου φαίνεται σωστό. Μπορείς να δώσεις παραδείγματα που είναι λάθος; Γιατί εγώ έτρεξα κάποια και έβγαλαν σωστά αποτελέσματα.
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
kiriazispao4ever
Δραστήριο μέλος


συγγνώμη για τα tags...Κατ' αρχάς το ότι δεν βάζεις στοίχιση (indents). Σου επεξεργάστηκα το μήνυμά σου, ρίξε μία ματιά πώς είναι καλό να παραθέτεις κώδικα. Να χρησιμοποιείς [code]...[/code] tags και στοίχιση, ώστε να διαβάζεται εύκολα. Ευτυχώς εδώ είναι απλός, αλλά σε πιο περίπλοκα παραδείγματα μην περιμένεις να κάτσει κάποιος να διαβάσει κώδικα χωρίς στοίχιση.
Επίσης, το πρόγραμμά σου μου φαίνεται σωστό. Μπορείς να δώσεις παραδείγματα που είναι λάθος; Γιατί εγώ έτρεξα κάποια και έβγαλαν σωστά αποτελέσματα.
και ευχαριστώ για την διόρθωση...
και στον κώδικα,δίκιο έχεις...τα υπολόγιζα με το μυαλό για την επαλήθευση...
και για αυτό,τα έκανα εγώ λάθος...

Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
kiriazispao4ever
Δραστήριο μέλος


1ον...έκλεισα και ξανανοιξα το codeblocks και τώρα όπου έγραφα ελληνικά πριν..τα βγάζει καπως ετσι "дысе сумтекестг "
οταν τρέχω το προγραμμα τρέχει όμως κανονικά... :/
2oν μεσα στον φάκελο που έχει δημιουργηθεί...υπάρχει ενα αρχειο .exe που όταν το τρέχω βγάζει κανονικα το προγραμμα μου..
μόλις βρει τις λύσεις όμως κλείνει αμέσως...
Όταν ομως το τρέχω απο Codeblocks δεν κλείνει αμέσως..αλλα οταν πατήσω κάποιο κουμπί...:/
καμιά βοήθεια? :/
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Zed
Διάσημο μέλος


Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
kiriazispao4ever
Δραστήριο μέλος


system "pause"; έβαλες?
οχι,το έβαλα τωρα και το δευτερο πρόβλημα επιλύθηκε


Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
g1wrg0s
Επιφανές μέλος


εχω μια συναρτηση της οποιας το πρωτοτυπο ειναι το εξης: int& f() {int x; return x;}
Δεν μπορω να καταλαβω γιατι γυρνα το x. η συναρτηση και ετσι int f() {int x; return x;} να ηταν , παλι θα θεωρουταν σωστη. Γινεται καποιος να μου πει πως το εχει καταλαβει γιατι δεν το πολυποιανω;
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος


Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
g1wrg0s
Επιφανές μέλος


Eστω οτι οντωςς το x ειναι καθολικη . Πως γινεται μια συναρτηση με το ιδιο body να εχει διαφορετικες επιστρεφομενες τιμες ...; Επισης με την φραση "επιστρεφει μια αναφορα στο x τι εννοουμε" ; Επιστρεφει διευθυνση, μια μεταβλητη χωρις ονομα η οποια αποτελει μια αναφορα στο x ;
int& r=f(); για να μην σε μπερδεψω, γινεται να γραψεις ενα ενα τα βηματα που κανει ο υπολογιστης ;
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Πληροφορικάριος
Δραστήριο μέλος


Δεν έχει διαφορετικες επιστρεφομενες τιμες,η μία επιστρεφει την τιμή της x και η άλλη επιστρέφει αναφορά στην x.αν έχει τo & στην δήλωση επιστρέφει αναφορά.. Πως γινεται μια συναρτηση με το ιδιο body να εχει διαφορετικες επιστρεφομενες τιμες ...;
Επιστρέφει αναφορά στην θέση μνήμης του x.Το δεύτερο που λές πρέπει να ισχύει.Επισης με την φραση "επιστρεφει μια αναφορα στο x τι εννοουμε" ; Επιστρεφει διευθυνση, μια μεταβλητη χωρις ονομα η οποια αποτελει μια αναφορα στο x ;
#include<iostream>
using namespace std;
int x=3;
int &f(){return x;}
int main()
{
int k=6;
cout<<f()<<endl;
f()=k;
cout<<f()<<endl;
return 0;
}
καλειτε η συνάρτηση επιστρέφει αναφορα στην x(δηλαδή αναφορά στην θέση μνήμης της x) εμφανίζετε το 3
καλειτε η συνάρτηση επιστρέφει αναφορα στην x και καταχωρήτε στο x το 6.
Βασικά το "f()" είναι σαν το όνομα της "αναφορικής μεταβλητής" στην x.
Σημείωση: Το μήνυμα αυτό γράφτηκε 12 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Χρήστες Βρείτε παρόμοια
-
Τα παρακάτω 0 μέλη και 1 επισκέπτες διαβάζουν μαζί με εσάς αυτό το θέμα:Tα παρακάτω 4 μέλη διάβασαν αυτό το θέμα:
-
Φορτώνει...
-
Το forum μας χρησιμοποιεί cookies για να βελτιστοποιήσει την εμπειρία σας.
Συνεχίζοντας την περιήγησή σας, συναινείτε στη χρήση cookies στον περιηγητή σας.