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

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
hurry-o
Δημοσιεύσεις: 18
Εγγραφή: 19 Σεπ 2009 19:35

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

Δημοσίευση από hurry-o » 18 Φεβ 2010 18:32

Καλησπέρα ειμαι νέος στον αντικειμενοστρεφή προγραμματισμό κ έχω μία απορία σχετικά με το 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
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

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

Δημοσίευση από virxen75 » 18 Φεβ 2010 19:54

χωρίς const

Κώδικας: Επιλογή όλων

#include <iostream>
using namespace std;

class Counter&#123;
    int count;
    int incrementStep;
public&#58;
Counter&#40;&#41;&#123;//constructor
     count=0;
     incrementStep=1;
&#125;
~Counter&#40;&#41;&#123;//destructor
&#125;

Counter&#40;int c, int iS&#41;&#123;//constructor
    count=c;
    incrementStep=iS;
&#125; 
void nextVal&#40;&#41;&#123;
    count+=incrementStep;
&#125;
int getCount&#40;&#41;&#123;
    return count;
&#125;

&#125;;

int main&#40;&#41;&#123;
    Counter counter1=Counter&#58;&#58;Counter&#40;2,2&#41;;
    cout<<counter1.getCount&#40;&#41;;
    int c;
    cin>>c;
    return 0;
&#125;

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

hurry-o
Δημοσιεύσεις: 18
Εγγραφή: 19 Σεπ 2009 19:35

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

Δημοσίευση από hurry-o » 18 Φεβ 2010 19:58

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

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

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

Δημοσίευση από dva_dev » 18 Φεβ 2010 20:32

Για να δώσεις αρχική τιμή σε const member variables, αυτές πρέπει να είναι στους initializers των construstors.
π.χ.

Κώδικας: Επιλογή όλων

class Counter
&#123;
	int count;
	const int incrementStep;

public&#58;
	~Counter&#40;&#41; &#123;
	&#125;

	Counter&#40;int c=0, int iS=1&#41;&#58; //Ακολουθούν οι initializers.
		count&#40;c&#41;, incrementStep&#40;iS&#41; &#123;
		//η count μιας και δεν είναι const, θα μπορούσε να παίρνει τιμή μέσα στο body του constructor
	&#125;

	void nextVal&#40;&#41; &#123;
		count+=incrementStep;
	&#125;

	int getCount&#40;&#41; &#123;
		return count;
	&#125;
&#125;;

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

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

Δημοσίευση από virxen75 » 18 Φεβ 2010 20:42

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

Κώδικας: Επιλογή όλων

#include <iostream>
using namespace std;

class Counter&#123;
    int count;
    const int *incrementStep;
public&#58;
Counter&#40;&#41;&#123;//constructor
     count=0;
     int iS=1;
     incrementStep=&iS;
&#125;
~Counter&#40;&#41;&#123;//destructor
&#125;

Counter&#40;int c, int iS&#41;&#123;//constructor
    count=c;
    incrementStep=&iS;
&#125; 
void nextVal&#40;&#41;&#123;
    count+=*incrementStep;
&#125;
void nextStep&#40;int step&#41;&#123;
    incrementStep=&step;
&#125;
int getCount&#40;&#41;&#123;
    return count;
&#125;
int getStep&#40;&#41;&#123;
    return *incrementStep;
&#125;
&#125;;

int main&#40;&#41;&#123;
    Counter counter1=Counter&#58;&#58;Counter&#40;2,2&#41;;
    cout<<"count="<<counter1.getCount&#40;&#41;<<endl;
    cout<<"step="<<counter1.getStep&#40;&#41;<<endl;
    counter1.nextVal&#40;&#41;;
    cout<<"count="<<counter1.getCount&#40;&#41;<<endl;
    counter1.nextStep&#40;5&#41;;
    cout<<"step="<<counter1.getStep&#40;&#41;<<endl;
    int c;
    cin>>c;
    return 0;
&#125;

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

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

Δημοσίευση από dva_dev » 18 Φεβ 2010 21:02

Κώδικας: Επιλογή όλων

class Counter&#123; 
    int count; 
    const int *incrementStep;
... 
    Counter&#40;int c, int iS&#41;&#123;//constructor 
    count=c; 
    incrementStep=&iS; 
&#125;
...
Αυτό μου φαίνεται πολύ buggy. Χρησιμοποιείς τον pointer από κάποιο temporary object που μόλις βγείς από τη function δεν θα ξέρεις τι έχει και μπορεί να αλλάξει οποιαδήποτε στιγμή (για την ακρίβεια με το που θα κάνεις την επόμενη κλήση σε κάποια function.
Δοκίμασε για παράδειγμα το παρακάτω κομμάτι κώδικα:

Κώδικας: Επιλογή όλων

int main&#40;&#41;&#123; 
    Counter counter1=Counter&#58;&#58;Counter&#40;2,2&#41;; //OK ως εδώ.
    Counter counter2=Counter&#58;&#58;Counter&#40;3,4&#41;; //*&#40;counter1.incrementStep&#41; = ???

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

    cout<<"count="<<counter1.getCount&#40;&#41;<<endl; 
    cout<<"step="<<counter1.getStep&#40;&#41;<<endl; 
    counter1.nextVal&#40;&#41;; 
    cout<<"count="<<counter1.getCount&#40;&#41;<<endl; 
    counter1.nextStep&#40;5&#41;; 
    cout<<"step="<<counter1.getStep&#40;&#41;<<endl; 
    int c; 
    cin>>c; 
    return 0; 
&#125; 

hurry-o
Δημοσιεύσεις: 18
Εγγραφή: 19 Σεπ 2009 19:35

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

Δημοσίευση από hurry-o » 18 Φεβ 2010 22:16

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

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

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

Δημοσίευση από dva_dev » 18 Φεβ 2010 22:38

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

hurry-o
Δημοσιεύσεις: 18
Εγγραφή: 19 Σεπ 2009 19:35

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

Δημοσίευση από hurry-o » 19 Φεβ 2010 00:08

Έτσι είναι η εκφώνηση της άσκησης,σπουδαζω βιομηχανικη πληροφορική στο ΤΕΙ Καβάλας.Η κλασή αναπαριστά ακέραιος μετρητές και τα private μέλη είναι η τίμη αρχικοποιησης του ακεραίου κ το βήμα αύξησης,μάλλον το βήμα αύξησης θέλει να μην μπόρεις να το αλλάξεις για κάποιο λογο.Ευχαριστω πολυ πάντως παιδιά,η ανταπόκριση σας ήταν άμεση!

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες