Kezdőoldal » Számítástechnika » Programozás » Nem unalmas minden privát...

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?

Figyelt kérdés
Sok sok munka van így ezzel. :(
2011. júl. 21. 11:21
 1/7 anonim ***** válasza:
Mért privát akkor?
2011. júl. 21. 11:25
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:
mert úgy tanultuk, hogy minden adattag legyen privát. Ha nem az lenne, akkor az OOP egyik alappillére sérülne.
2011. júl. 21. 12:18
 3/7 anonim ***** válasza:
ez hülyeség, ha a setter csak annyit csinál, hogy beállít egy változót, míg a getter ugyanannak az értékét visszaadja, akkor nyugodtan lehet publikus, nem sérül semmi alappillér, persze ha ennek a változó beállításának más következménye is van (pl másik tagváltozó értéke függ tőle), akkor már nem szabad publikusnak lennie, mert sérül az adatintegritás.
2011. júl. 21. 20:17
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:

"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.

2011. júl. 21. 20:42
Hasznos számodra ez a válasz?
 5/7 A kérdező kommentje:
ok, de akkor a privátot hol kell használni?
2011. júl. 21. 20:44
 6/7 A kérdező kommentje:

c++-ban nem öröklődik a friend tulajdonság (hacsak azóta nem jött ki valami újabb szabvány)


[link]

2011. júl. 21. 20:53
 7/7 anonim ***** válasza:

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."

[link]


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.

2011. júl. 21. 22:37
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!