Slovo přístup znamená číst nebo měnit hodnotu proměnné a také to znamená používat funkci. Specifikátory přístupu v jazyce C ++ jsou slova, soukromá, chráněná a veřejná. Rozhodují, zda má člen přístup k ostatním členům své třídy, nebo zda má funkce nebo operátor mimo třídu, které do třídy nepatří, přístup k jakémukoli členovi třídy. Také rozhodují, zda člen odvozené (podřízené) třídy může přistupovat ke členu nadřazené třídy.
K pochopení tohoto článku a k otestování poskytnutého kódu jsou nutné základní znalosti C ++.
Obsah článku
- Veřejné a soukromé specifikátory
- Chráněný specifikátor
- Odvozené specifikátory tříd a specifikátory členů
- Závěr
Veřejné a soukromé specifikátory
Třída
Každý člen třídy má přístup k jakémukoli jinému členovi téže třídy, bez ohledu na to, který je označen jako veřejný nebo soukromý. Zvažte následující program:
#zahrnout
použitím jmenný prostorhodiny;
třídaTheCla
{
soukromé:
intčíslo 1;
intnum2;
veřejnost:
TheCla(intn1,intn2)
{
číslo 1=n1;num2=n2;
}
intmetoda()
{
vrátit sečíslo 1;
}
};
inthlavní()
{
TheCla obj(10,dvacet);
intč. 2=obj.metoda();
náklady<<č. 2<<' n';
// int no1 = obj.num1;
vrátit se 0;
}
Výstup je 10. Soukromí členové jsou num1 a num2. Veřejnými členy jsou TheCla () a method (). Všimněte si, že TheCla () je funkce konstruktoru, která inicializuje požadované proměnné. Oblast specifikátoru přístupu začíná od jeho označení na konec popisu třídy (definice) nebo na začátek jiného specifikátoru přístupu.
Ve funkci main () je prvním příkazem instance zahrnující funkci konstruktoru, která inicializuje num1 a num2. Další příkaz volá veřejného člena třídy (metoda ()).
Nyní, v popisu třídy (definice), veřejná členská funkce, TheCla (), přistupuje k soukromým členům, num1 a num2. Veřejná členská funkce, metoda (), také přistupuje k soukromému členovi, číslo 1. Jakýkoli člen v popisu třídy má přístup k jakémukoli jinému členovi v rámci stejného popisu třídy; nezáleží na tom, který člen je soukromý nebo veřejný.
Funkce nebo operátor, které nejsou deklarovány v popisu třídy a mimo popis třídy, však mají přístup pouze k veřejným členům třídy. Funkce main () je například funkce deklarovaná mimo popis třídy. Má přístup pouze k veřejným členům metody () a TheCla (). Uvnitř funkce main () je funkce TheCla () obj (10, 20).
Externí funkce nebo externí operátor, jako je například funkce main (), nemůže přistupovat k žádným soukromým členům třídy, například num1 nebo num2. Odeberte indikátor komentáře // z příkazu last-but-one v main (). Pokusíte -li se program zkompilovat, mějte na paměti, že se program nezkompiluje a zobrazí se chybová zpráva.
Výchozí specifikátor
Výchozí specifikátor pro třídu je soukromý. Výše uvedený popis třídy je tedy stejný jako následující popis, soukromý, ale bez specifikátoru:
{
intčíslo 1;
intnum2;
veřejnost:
TheCla(intn1,intn2)
{
číslo 1=n1;num2=n2;
}
intmetoda()
{
vrátit sečíslo 1;
}
};
Poznámka : popisek specifikátoru přístupu začíná specifikátorem a za ním následuje dvojtečka.
Chráněný specifikátor
V rámci popisu třídy a od vnější funkce nebo od externího operátora je chráněný specifikátor stejný jako soukromý specifikátor. Nyní nahraďte soukromý specifikátor ve výše uvedeném programu specifikátorem, chráňte a odstraňte indikátor komentáře // z příkazu last-but-one ve funkci main (). Pokusíte -li se program zkompilovat, mějte na paměti, že se program nezkompiluje a zobrazí se chybová zpráva.
Problém chráněného specifikátoru nastává, když členové odvozené (zděděné) třídy musí přistupovat ke členům základní (nadřazené) třídy.
Veřejně odvozená třída s veřejnými členy
Zvažte následující program:
použitím jmenný prostorhodiny;
třídaTheCla
{
veřejnost:
intčíslo 1= 10;
chráněný:
intnum2= dvacet;
soukromé:
intnum3= 30;
};
třídaChildCla: veřejnostTheCla
{
veřejnost:
intmetoda 1()
{
vrátit sečíslo 1;
}
intmetoda 2()
{
vrátit senum2;
}
/*int metoda3 ()
{
vrátit num3;
} * /
};
inthlavní()
{
ChildCla dítěObj;
intč.1=dítěObj.metoda 1();
náklady<<č.1<<' n';
intč. 2=dítěObj.metoda 2();
náklady<<č. 2<<' n';
vrátit se 0;
}
Výstup je:
10
dvacet
V základní třídě je num1 veřejné, num2 je chráněno a num3 je soukromé. V odvozené třídě jsou všechny členské funkce veřejné. První funkce, method1 (), přistupuje k veřejnému datovému členu, num1. Druhá funkce, method2 (), přistupuje k chráněnému datovému členu, num2. Třetí funkce, method3 (), přestože je aktuálně komentována, by měla přistupovat k soukromému datovému členu, num3.
Odvozená třída není deklarována bez specifikátoru přístupu (veřejný, chráněný nebo soukromý). Odvozená třída je výše deklarována pomocí veřejného specifikátoru, tj.
třídaChildCla: veřejnostTheCla{}Nyní zrušte komentář definice třetí členské funkce v odvozené třídě. Pokud se pokusíte program zkompilovat, všimněte si, že se nezkompiluje a zobrazí chybová zpráva.
Poznámka : Když je celá odvozená třída deklarována jako veřejná, její členové nemají přístup k soukromým členům základní třídy. Jeho členové však mají přístup k veřejným a chráněným členům základní třídy. Výše uvedený program to ilustruje.
Všimněte si však, že veřejný člen veřejné odvozené třídy má přístup k chráněnému členu základní třídy.
Odvozené specifikátory tříd a specifikátory členů
Chráněná odvozená třída s veřejnými členy
Veřejný specifikátor nahraďte chráněným v deklaraci odvozené třídy výše:
Zkompilujte a spusťte program a všimněte si, že výsledek je stejný jako dříve.
Když je tedy celá odvozená třída deklarována jako chráněná, její členové nemají přístup k soukromým členům základní třídy. Jeho členové však mají přístup k veřejným a chráněným členům základní třídy. To je stejné, jako když je odvozená třída deklarována jako veřejná.
Poznámka : chráněný člen veřejné odvozené třídy má přístup k chráněnému členu základní třídy.
Soukromá odvozená třída s veřejnými členy
Nahraďte chráněný specifikátor privátním v deklaraci odvozené třídy výše takto:
Zkompilujte a spusťte program a všimněte si, že výsledek je stejný jako dříve.
Když je tedy celá odvozená třída prohlášena za soukromou, její členové nemají přístup k soukromým členům základní třídy. Jeho členové však mají přístup k veřejným a chráněným členům základní třídy. To je stejné, jako když je odvozená třída deklarována jako chráněná nebo veřejná.
Veřejně odvozená třída s chráněnými členy
Zadejte, zkompilujte a spusťte následující program, ve kterém je chráněna celá odvozená třída a jsou chráněni i její členové. Některé segmenty kódu jsou následující:
použitím jmenný prostorhodiny;
třídaTheCla
{
veřejnost:
intčíslo 1= 10;
chráněný:
intnum2= dvacet;
soukromé:
intnum3= 30;
};
třídaChildCla: veřejnostTheCla
{
chráněný:
intmetoda 1()
{
vrátit sečíslo 1;
}
intmetoda 2()
{
vrátit senum2;
}
/*int metoda3 ()
{
vrátit num3;
} * /
};
inthlavní()
{
/*ChildCla childObj;
int no1 = childObj.method1 ();
náklady<
/*int no2 = childObj.method2 ();
náklady<
vrátit se 0;
}
Program funguje tak, jak je. Neexistuje žádný výstup a nemá být žádný výstup podle toho, jak byl program napsán.
Nyní zrušte komentář definice funkce, method3 (), v odvozené třídě. Pokud se pokusíte program zkompilovat, všimněte si, že se nezkompiluje a zobrazí chybová zpráva. To znamená, že k soukromému členovi nelze přistupovat z vnější funkce, externího operátora nebo odvozené třídy. Jedná se o stejný závěr, jaký byl učiněn výše, týkající se přístupu k soukromému členovi.
Poznámka : chráněný člen chráněné odvozené třídy má přístup k chráněnému členu základní třídy.
Nyní vložte komentáře zpět do odvozené třídy a zrušte komentář u prvního segmentu kódu ve funkci main (). Pokud se pokusíte program zkompilovat, všimněte si, že program nebude kompilovat kvůli prvnímu segmentu kódu ve funkci main (). Tento efekt není nový. Kromě odvozené třídy, vnějších funkcí a vnějších operátorů mají chránění a soukromí členové (základní nebo odvozené) třídy stejný specifikátor, soukromý. Funkce main () vidí chráněného člena jakékoli třídy, ať už základní nebo odvozené, podle stejného specifikátoru, soukromého, a má k ní zakázaný přístup.
Pokud je druhý segment kódu funkce main () bez komentáře, bude platit stejné vysvětlení. To znamená, že funkce main () nebude mít přístup k chráněnému nebo soukromému členu odvozené třídy nebo základní třídy. To je nezávislé na tom, zda chráněný člen odvozené třídy mohl přistupovat k chráněnému členu základní třídy.
Chráněná odvozená třída s chráněnými členy
Veřejný specifikátor nahraďte chráněným v deklaraci odvozené třídy výše:
Vložte komentář segmentů kódu zpět do funkce main (), pokud to již nebylo provedeno. Zkompilujte a spusťte program a všimněte si, že výsledek je jako dříve.
Soukromá odvozená třída s chráněnými členy
Nahraďte chráněný specifikátor privátním v deklaraci odvozené třídy výše takto:
Zkompilujte a spusťte program a všimněte si, že výsledek bude jako dříve.
Veřejně odvozená třída se soukromými členy
Nahraďte soukromý specifikátor veřejným v deklaraci odvozené třídy výše takto:
Nastavit členy odvozené třídy jako soukromé. Zkompilujte a spusťte program. Výsledek se neliší od případu Public Derived Class with Protected Members.
Chráněná odvozená třída se soukromými členy
Veřejný specifikátor nahraďte chráněným v deklaraci odvozené třídy výše:
Zkompilujte a spusťte program. Tento výsledek se neliší od případu Protected Derived Class with Protected Members.
Soukromá odvozená třída se soukromými členy
Nahraďte chráněný specifikátor privátním v deklaraci odvozené třídy výše takto:
Zkompilujte a spusťte program. Tento výsledek se neliší od případu Soukromá odvozená třída s chráněnými členy.
Závěr
Specifikátory přístupu C ++ jsou slova private, protected a public. Rozhodují o přístupu pro členy třídy. Oblast specifikátoru přístupu začíná od jeho označení, na konec popisu třídy (definice) nebo na začátek jiného specifikátoru přístupu. Každý člen třídy má přístup k jakémukoli jinému členovi téže třídy. K soukromému členovi třídy nemůže přistupovat žádná vnější funkce, žádný externí operátor ani odvozená třída.
Člen základní třídy musí být chráněn, aby k členu odvozené třídy měl přístup soukromý člen základní třídy. Tento chráněný člen základní třídy je externí funkcí nebo externím operátorem vnímán jako soukromý člen základní třídy.
K veřejnému členovi třídy může přistupovat jakákoli vnější funkce, jakýkoli externí operátor nebo odvozená třída.
Při absenci jakéhokoli specifikátoru přístupu ve třídě se předpokládá soukromý specifikátor. To znamená, že výchozí specifikátor přístupu je soukromý.
Reference použité v této práci
- Vysvobodil Abrahama , Dědičnost: ZNOVU ZPŮSOBILOST A ROZŠÍŘENÍ
- S. Malik, Datové struktury používající C ++ 2. vydání