Forum μαθήματος

Κλήση μίας μεθόδου μιας κλάσης που προηγείται της άλλης

Κλήση μίας μεθόδου μιας κλάσης που προηγείται της άλλης

από Ελισαβετ Αϊφαντη -
Αριθμός απαντήσεων: 1

Αν θέλουμε να υλοποιήσουμε δύο κλάσεις husband και wife, στην καθεμία από τις οποίες καλείται η μέθοδος getname() του καθένα (ως μέθοδος της κλάσης person που κληρονομούνε), πώς μπορεί η καθεμία να καλέσει τη μέθοδο husband->getname() και wife->getname() αντίστοιχα; Παρακάτω είναι ο κώδικας: 

class person {
private:
string _name;
int _age;
public:
person(string name, int age) : _name(name), _age(age) {}

virtual void marital_status(){
cout << "Unknown." << endl;
}

string getname(){
return _name;
}
};
class husband; // forward declaration
class wife : public person {
private:
husband* _herhusband;
public:
wife(husband* herhusband, int age, string name) : person(name, age), _herhusband(herhusband) {}
void marital_status() override {
cout << getname() << " is married to " << _herhusband->getname();
}
};

class husband : public person {
private:
wife* _hiswife;
public:
husband(wife* hiswife, int age, string name) : person(name, age), _hiswife(hiswife) {}
void marital_status() override{
cout << getname() << " is married to " << _hiswife->getname();
}
}
Σε αυτή την περίπτωση γίνεται να συγχωνεύσουμε τις δύο κλάσεις σε μία με ΄όνομα π.χ. partner αλλά πώς γίνεται γενικότερα να υλοποιηθεί αυτός σε παρόμοιες καταστάσεις; Με το forward declaration απλα΄ επιτρέπεται να έχει ως private μέλος τον husband αλλά όχι να καλέσει το getname() του.

Σε απάντηση σε Ελισαβετ Αϊφαντη

Απάντηση: Κλήση μίας μεθόδου μιας κλάσης που προηγείται της άλλης

από Γεώργιος Αλεξανδρίδης -
Καλησπέρα Ελισάβετ,

Αν και θα το καλύψετε σε πιο μετά διάλεξη, μπορείς ωστόσο να δεις τις φίλιες κλάσεις (friend classes) της C++.