freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

oop απορία αρχάριου


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [9 Μηνύματα]      Bookmarks Tags: oop Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
hurry-o


Μέλος από: 19 Σεπ 2009
Μηνύματα: 18

View users profile
ΜήνυμαΣτις: 18 Φεβ 2010 18:32    Θέμα: oop απορία αρχάριου Απάντηση με παράθεση  Mark this post and the followings unread

Καλησπέρα ειμαι νέος στον αντικειμενοστρεφή προγραμματισμό κ έχω μία απορία σχετικά με το constant reference parameter.Λοιπόν εδώ είναι η κλάση μου:


class counter{
int count;
const int incrementStep;
public:
counter( int c=0, int iS=1);
void nextVal() {count+=incrementStep;}

};

counter::counter(int c, int iS)
{
count=c;
incrementStep=iS;
}



Δεν μπορώ να καταλάβω πως θα δώσω τιμή στο private μέλος incrementStep εφόσων είναι const,κ έχω πρόβλημα με τον δημιουργό μου.Ευχαριστω.
virxen75


Μέλος από: 18 Φεβ 2009
Μηνύματα: 256+
Περιοχή: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ
View users profile
ΜήνυμαΣτις: 18 Φεβ 2010 19:54    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

χωρίς const

κώδικας:

#include <iostream>
using namespace std;

class Counter{
    int count;
    int incrementStep;
public:
Counter(){//constructor
     count=0;
     incrementStep=1;
}
~Counter(){//destructor
}

Counter(int c, int iS){//constructor
    count=c;
    incrementStep=iS;
}
void nextVal(){
    count+=incrementStep;
}
int getCount(){
    return count;
}

};

int main(){
    Counter counter1=Counter::Counter(2,2);
    cout<<counter1.getCount();
    int c;
    cin>>c;
    return 0;
}



γιατί πρέπει να είναι const? το ζητάει η άσκηση?
hurry-o


Μέλος από: 19 Σεπ 2009
Μηνύματα: 18

View users profile
ΜήνυμαΣτις: 18 Φεβ 2010 19:58    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Το private μέλος incrementStep είναι const,ετσί δουλεύει το ξέρω,το θέμα είναι να του δίνω τιμές εφόσων είναι const
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 18 Φεβ 2010 20:32    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Για να δώσεις αρχική τιμή σε const member variables, αυτές πρέπει να είναι στους initializers των construstors.
π.χ.
κώδικας:
class Counter
{
   int count;
   const int incrementStep;

public:
   ~Counter() {
   }

   Counter(int c=0, int iS=1): //Ακολουθούν οι initializers.
      count(c), incrementStep(iS) {
      //η count μιας και δεν είναι const, θα μπορούσε να παίρνει τιμή μέσα στο body του constructor
   }

   void nextVal() {
      count+=incrementStep;
   }

   int getCount() {
      return count;
   }
};
virxen75


Μέλος από: 18 Φεβ 2009
Μηνύματα: 256+
Περιοχή: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ
View users profile
ΜήνυμαΣτις: 18 Φεβ 2010 20:42    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

μπορείς να το κάνεις και έτσι ώστε να αλλάζει όποτε θες

κώδικας:

#include <iostream>
using namespace std;

class Counter{
    int count;
    const int *incrementStep;
public:
Counter(){//constructor
     count=0;
     int iS=1;
     incrementStep=&iS;
}
~Counter(){//destructor
}

Counter(int c, int iS){//constructor
    count=c;
    incrementStep=&iS;
}
void nextVal(){
    count+=*incrementStep;
}
void nextStep(int step){
    incrementStep=&step;
}
int getCount(){
    return count;
}
int getStep(){
    return *incrementStep;
}
};

int main(){
    Counter counter1=Counter::Counter(2,2);
    cout<<"count="<<counter1.getCount()<<endl;
    cout<<"step="<<counter1.getStep()<<endl;
    counter1.nextVal();
    cout<<"count="<<counter1.getCount()<<endl;
    counter1.nextStep(5);
    cout<<"step="<<counter1.getStep()<<endl;
    int c;
    cin>>c;
    return 0;
}
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 18 Φεβ 2010 21:02    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

παράθεση:
κώδικας:

class Counter{
    int count;
    const int *incrementStep;
...
    Counter(int c, int iS){//constructor
    count=c;
    incrementStep=&iS;
}
...

Αυτό μου φαίνεται πολύ buggy. Χρησιμοποιείς τον pointer από κάποιο temporary object που μόλις βγείς από τη function δεν θα ξέρεις τι έχει και μπορεί να αλλάξει οποιαδήποτε στιγμή (για την ακρίβεια με το που θα κάνεις την επόμενη κλήση σε κάποια function.
Δοκίμασε για παράδειγμα το παρακάτω κομμάτι κώδικα:
κώδικας:
int main(){
    Counter counter1=Counter::Counter(2,2); //OK ως εδώ.
    Counter counter2=Counter::Counter(3,4); //*(counter1.incrementStep) = ???

    counter2.nextVal(); //*(counter1.incrementStep) = ??? *(counter2.incrementStep) = ???
    counter2.nextVal(); //Αν δεν έχει σκάσει το πρόγραμμα ακόμα, τα έχει @@#$% σίγουρα.

    cout<<"count="<<counter1.getCount()<<endl;
    cout<<"step="<<counter1.getStep()<<endl;
    counter1.nextVal();
    cout<<"count="<<counter1.getCount()<<endl;
    counter1.nextStep(5);
    cout<<"step="<<counter1.getStep()<<endl;
    int c;
    cin>>c;
    return 0;
}
hurry-o


Μέλος από: 19 Σεπ 2009
Μηνύματα: 18

View users profile
ΜήνυμαΣτις: 18 Φεβ 2010 22:16    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Ευχαριστώ,η πρώτη απάντηση του dva_dev με καλυπτεί,αυτο θα χρησιμοποιησω.
dva_dev
Script Master

Μέλος από: 16 Σεπ 2005
Μηνύματα: 256+

View users profile Visit posters website
blog deviantART facebook linkedin 
ΜήνυμαΣτις: 18 Φεβ 2010 22:38    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Λύσε μας και την απορία γιατί μια private member variable την χρειάζεσαι να είναι const.
hurry-o


Μέλος από: 19 Σεπ 2009
Μηνύματα: 18

View users profile
ΜήνυμαΣτις: 19 Φεβ 2010 00:08    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Έτσι είναι η εκφώνηση της άσκησης,σπουδαζω βιομηχανικη πληροφορική στο ΤΕΙ Καβάλας.Η κλασή αναπαριστά ακέραιος μετρητές και τα private μέλη είναι η τίμη αρχικοποιησης του ακεραίου κ το βήμα αύξησης,μάλλον το βήμα αύξησης θέλει να μην μπόρεις να το αλλάξεις για κάποιο λογο.Ευχαριστω πολυ πάντως παιδιά,η ανταπόκριση σας ήταν άμεση!
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [9 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Τώρα είναι 03 Δεκ 2016 21:44 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos