Public vs. private – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Public vs. private – C / C++ – Fórum – Programujte.comPublic vs. private – C / C++ – Fórum – Programujte.com

 

19. 4. 2010   #1
-
0
-

Ahoj, chtěla bych se zeptat, pokud mám třídu v C++, proč se některé členské data používají jako private, a konstruktory a destruktory jako public? Proč tomu tak je? Nikde na internetu jsem tuto problematiku nenašla.

No a dále bych se chtěla zeptat, jaké jsou rozdíly mezi těmito zápisy, nějak nepobírám co se stane u toho prvního:

		konec->dalsi = novy;

konec = novy;

Nahlásit jako SPAM
IP: 83.240.104.–
KIIV
~ Moderátor
+43
God of flame
19. 4. 2010   #2
-
0
-

popsany na netu to samozrejme je.. akorat se tomu nadava "zapouzdreni" .. podrobneji je to rozepsane take pod pojmem OOP alias objektove orientovane programovani

je to vesmes skryti vsech vnitrnich dat a povoleni s nima manipulovat pouze pres urcene rozhrani (public)
melo by to zabranit ulozit do tech vnitrnich promennych nejake nesmysly ktere by pak schodily program (nebo by to jen blbe fungovalo)

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
19. 4. 2010   #3
-
0
-

To KIIV : děkuji no a mohla bych se tě ještě zeptat na to, co jsem napsala pod tím?

Nahlásit jako SPAM
IP: 83.240.104.–
Palmik0
Super člen
19. 4. 2010   #4
-
0
-

Ve skutečnosti konstruktor nemusí být public, i když většinou tomu tak je.
Rozdíl mezi public a private je ten, že k private funkcím a oběktům nelze přistupovat jinde než v metodách dané třídy, naorzdíl od private metod, které se běžně volají i mimo tu danou třídu. Nejlépe to asi půjde vidět na příkladu.
Mějme třídu MyClass a metody fooPrivate a fooPublic

class MyClass

{
public:
MyClass(int number);
~MyClass() {};
int fooPublic();
void setNumber(int number);

private:
int number_m;
int fooPrivate();
};

MyClass::MyClass(int number)
{
// Lepší by bylo použít inicializační list, ale to je OT
number_m = number;
}

int MyClass::fooPrivate()
{
// K number_m se vztahují stejná pravidla jako k privátním funkcím - viz bod níže
return number_m * 10;
}

int MyClass::fooPublic()
{
// Zde volám privátní metodu třídy, ty lze volat jen uvnitř metod dané třídy,
// spřátelených funkcích a v některých případech dědičnosti
return fooPrivate() * 5;
}

int MyClass::setNumber(int number)
{
// number_m je privátní, tudíž nejde z venčí přímo nastavit,
// za použití setNumber(int) to ovšem už jde
number_m = number;
}


No... a teď k vysvětlení, mějme následující kód

MyClass object1(10); // object1 není ukazatel, jedná se o normální objekt proměnné MyClass

MyClass* object2 = new MyClass(10); // Vytvoření objektu tzv. na heapu, object2 je ukazatel

object1.setNumber(8);
object2->setNumber(8); // Je tedy vidět, že operátor -> se využívá u ukazatelů na objekt

int a = object1.fooPublic();
int b = object2->fooPublic();


// CO NELZE DĚLAT S PRIVÁTNÍMI METODAMI A PROMĚNNÝMI
int a = object1.number_m; // NELZE!
int a = object1.fooPrivate(); // NELZE!
int b = object2->number_m; // NELZE!
int b = object2->fooPrivate(); // NELZE!

object1.number_m = 5; // NELZE
object2->number_m = 5; // NELZE

// LZE - v tomto případě by to byl ekvivalent object1.number_m,
// ovšem jen pokud by number_m bylo v public sekci
object1.setNumber(5);

// LZE - v tomto případě by to byl ekvivalent object2->number_m,
// ovšem jen pokud by number_m bylo v public sekci
object2->setNumber(5)


Na co použít private a na co public už částečně shrnul KIIV. Jinak doporučuji konsultovat http://www.parashift.com/c++-faq-lite/

Nahlásit jako SPAM
IP: 85.207.177.–
Yesterday is history. Tomorrow is a mystery. Today is a gift and that is why it's called the present.
KIIV
~ Moderátor
+43
God of flame
19. 4. 2010   #5
-
0
-

To inferno-girl :

konec->dalsi = novy;
-> je operator pro dereferenci (predpoklada se ze je tam ukazatel na objekt)
a vesmes se do atributu nasledujici da ukazatel na nove vytvoreny prvek

konec = novy;
a toto je uz prepsani ukazatele tim novym .. vypada to na nejakou formu spojoveho seznamu.. kde udrzujes posledni prvek, aby se dalo rychle vkladat

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
19. 4. 2010   #6
-
0
-

Jo já to chápu... Privátní datové složky se používají pro definici uvnitř těch metod tříd. Většinou jako nastavení nebo returny. Díky za dobrý příklad, chtěla jsem to i v C++.

Nahlásit jako SPAM
IP: 83.240.104.–
19. 4. 2010   #7
-
0
-

no -- takže pokud to chápu dobře tak, ukazatel konec bude mít vlastně novou adresu. A to takovou, kam ukazuje ukazatel novy.

Nahlásit jako SPAM
IP: 83.240.104.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 33 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý