Nem unalmas minden privát változóhoz get, set függvényt írni c++ -ban? A friend tulajdonság meg miért nem öröklődik?
"friend tulajdonság meg miért nem öröklődik?"
Az öröklődik.
"mert úgy tanultuk, hogy minden adattag legyen privát. Ha nem az lenne, akkor az OOP egyik alappillére sérülne."
A tisztán objektum orientált paradigma szerint minden objektum ezeknek az objektum egy-egy saját belső állapota van. Egyik objektum a másik állapotát (metódushívással) üzenetküldéssel érheti el, közvetlenül nem férhet hozzá a másik adattagjához ... (Erről órákig tudnék beszélni.)
Azért kell set get függvény nevezzük inkább metódusnak hogy az adattagokhoz csak meghatározott módon lehessen hozzáférni, jól kontrollált módon, mert még elronthatnánk az objektumot, pl egy tört szám objektum nevezőjét ne tudjuk 0-ra állítani. Ha biztosra tudjuk hogy nem vezet egy adattag direkt elérése inkonzisztens állapothoz akkor az lehet publikus is, igaz ezzel megsértettük az OOP egyik alappilérét, de a friend tulajdonság is megsérti azt.
Nem jó a forrás.(Régen nem e támogatta a szabvány azt nem tudom) Az elte honlapján jól le van írva:
"... Ha egy függvény "barátja" egy osztálynak, akkor az barátja az osztály leszármazottainak is, de csak az eredeti osztályban definiált privát mezôkhöz fér hozzá, az utód osztályokban definiáltakhoz nem. Egy friend függvény nem csak egy osztálynak lehet barátja, hanem akár többnek is, és nem kell hogy egyszerű függvény legyen, lehet egy másik osztály tagfüggvénye, vagy akár egy másik osztály is lehet."
De ki is próbálhattad volna, példa:
#include <iostream>
using namespace std;
class Base {
public:
public:
friend void f(Base& b);
protected:
virtual void do_f(){cout << "basic class" << endl;};
};
inline void f(Base& b)
{
b.do_f();
}
class Derived : public Base {
public:
protected:
virtual void do_f(){cout << "child class" << endl;};
};
int main(){
Base b;
Derived d;
f(b);
f(d);
return 0;
}
"ok, de akkor a privátot hol kell használni?"
Elolvastad el a 20:42-es hozzászólásomat?
Ahol az adatintegritást elronthatná a tagváltozó közvetlen módosítása. Jobbnak látja a programozó ha a leszármazott osztályokban sem látható. Ajánlás hogy mindig private, legfeljebb protected, a későbbi változtatásokra való tekintettel. Persze nincsen egységesen elfogadott módszer.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!