C ++ Mga Detalye ng Pag-access

C Access Specifiers



Sa C ++, ang isang klase ay isang hanay ng mga variable at pag-andar na na-configure upang gumana nang magkasama. Kapag ang mga variable ng klase ay binibigyan ng mga halaga, isang bagay ang nakuha. Ang isang bagay ay may parehong mga variable at pag-andar bilang isang klase, ngunit sa oras na ito, ang mga variable ay may mga halaga. Maraming mga bagay ang maaaring malikha mula sa isang klase. Ang isang bagay ay naiiba sa ibang bagay ayon sa iba't ibang hanay ng mga halagang itinalaga sa mga variable ng iba pang object. Ang paglikha ng isang bagay mula sa isang klase ay sinasabing nagpapatibay ng bagay. Kahit na ang dalawang magkakaibang mga bagay ay may parehong halaga para sa kanilang mga variable, ang mga bagay na ito ay magkakaibang mga entity, na kinilala ng iba't ibang mga pangalan sa programa. Ang mga variable para sa isang bagay at ang kaukulang klase ay tinatawag na mga kasapi ng data. Ang mga pagpapaandar ng isang bagay at ang kaukulang klase ay tinatawag na mga pagpapaandar ng miyembro. Ang mga kasapi ng data at pag-andar ng miyembro ay tinatawag na mga kasapi.

Ang ibig sabihin ng salitang pag-access ay basahin o baguhin ang halaga ng isang variable, at nangangahulugan din ito na gumamit ng isang pagpapaandar. Ang mga specifier ng pag-access sa C ++ ay ang mga salita, pribado, protektado, at publiko. Napagpasyahan nila kung ang isang miyembro ay maaaring mag-access sa iba pang mga miyembro ng klase nito, o kung ang isang function o operator sa labas ng klase at hindi kabilang sa klase ay maaaring mag-access sa sinumang miyembro ng klase. Napagpasyahan din nila kung ang isang miyembro ng isang nagmula (bata) na klase ay maaaring mag-access sa isang miyembro ng isang magulang na klase.







Ang pangunahing kaalaman sa C ++ ay kinakailangan upang maunawaan ang artikulong ito at upang subukan ang ibinigay na code.



Nilalaman ng Artikulo

Ang Publiko at Pribadong Mga Tukoy

Klase
Ang sinumang miyembro ng isang klase ay maaaring mag-access sa sinumang iba pang miyembro ng parehong klase, na independiyente na kung saan ay may label na pampubliko o pribado. Isaalang-alang ang sumusunod na programa:



# isama
gamit namespaceoras;

klaseAngCla
{
pribado:
intnum1;
intnum2;
pampubliko:
AngCla(intn1,intn2)
{
num1=n1;num2=n2;
}
intparaan()
{
bumalik kanum1;
}
};

intpangunahing()
{
TheCla obj(10,dalawampu);
inthindi2=objparaan();
gastos<<hindi2<<' n';

// int no1 = obj.num1;

bumalik ka 0;
}

Ang output ay 10. Ang mga pribadong miyembro ay num1 at num2. Ang mga kasapi sa publiko ay TheCla () at pamamaraan (). Tandaan na ang TheCla () ay ang function ng konstruktor na nagsisimula sa mga variable ng interes. Ang rehiyon ng isang tumutukoy sa pag-access ay nagsisimula mula sa label nito hanggang sa katapusan ng paglalarawan ng klase (kahulugan) o sa pagsisimula ng isa pang access specifier.





Sa pangunahing () pag-andar, ang unang pahayag ay ang instantiation na kinasasangkutan ng pagpapaandar ng tagapagbuo, na nagsisimula sa num1 at num2. Ang susunod na pahayag ay tumatawag sa miyembro ng publiko, pamamaraan (), ng klase.

Ngayon, sa paglalarawan ng klase (kahulugan), ang pagpapaandar ng kasapi ng publiko, TheCla (), ina-access ang mga pribadong miyembro, num1 at num2. Gayundin, ang pagpapaandar ng pampublikong miyembro, pamamaraan (), ina-access ang pribadong miyembro, num1. Ang sinumang kasapi sa loob ng isang paglalarawan sa klase ay maaaring mag-access sa anumang ibang kasapi sa loob ng parehong paglalarawan sa klase; hindi mahalaga kung aling miyembro ang pribado o publiko.



Gayunpaman, ang isang pagpapaandar o operator na hindi idineklara sa paglalarawan ng klase at sa labas ng paglalarawan ng klase ay maaaring ma-access lamang ang mga pampublikong miyembro ng klase. Ang pangunahing () pagpapaandar, halimbawa, ay isang pagpapaandar na idineklara sa labas ng paglalarawan ng klase. Nagawang ma-access lamang ang pamamaraan () at ang mga miyembro ng publiko ng TheCla (). Sa loob ng pangunahing () pagpapaandar, ang pagpapaandar ng TheCla () ay obj (10, 20).

Ang isang pagpapaandar sa labas o labas ng operator, tulad ng pangunahing () pagpapaandar, ay hindi ma-access ang anuman sa mga pribadong miyembro ng klase, tulad ng num1 o num2. Alisin ang tagapagpahiwatig ng komento, //, mula sa huling-ngunit-isang pahayag na pangunahing (). Kung susubukan mong mag-ipon ng programa, tandaan na ang programa ay hindi mag-ipon, na nagbibigay ng isang mensahe ng error.

Default na Tukoy
Ang default na tumutukoy para sa isang klase ay pribado. Kaya, ang paglalarawan sa klase sa itaas ay kapareho ng sumusunod na paglalarawan, pribado, ngunit wala ang specifier:

klaseAngCla
{
intnum1;
intnum2;
pampubliko:
AngCla(intn1,intn2)
{
num1=n1;num2=n2;
}
intparaan()
{
bumalik kanum1;
}
};

Tandaan : ang tatak ng access specifier ay nagsisimula sa specifier, at pagkatapos ay susundan ng isang colon.

Ang Protected Specifier

Sa loob ng isang paglalarawan sa klase, at mula sa isang function sa labas o sa labas ng operator, ang protektadong specifier ay kapareho ng pribadong specifier. Ngayon, palitan ang pribadong tagapagpahiwatig sa nasa itaas na programa ng tagatukoy, protektahan, at alisin ang tagapagpahiwatig ng komento, //, mula sa huling-ngunit-isang pahayag sa pangunahing () pagpapaandar. Kung susubukan mong mag-ipon ng programa, tandaan na ang programa ay hindi mag-ipon, na nagbibigay ng isang mensahe ng error.

Ang isyu ng protektadong specifier ay lilitaw kapag ang mga miyembro ng nagmula (minana) na klase ay dapat na mag-access sa mga miyembro ng batayang (magulang) na klase.

Public Derives Class kasama ang mga Miyembro sa Publiko
Isaalang-alang ang sumusunod na programa:

# isama
gamit namespaceoras;

klaseAngCla
{
pampubliko:
intnum1= 10;
protektado:
intnum2= dalawampu;
pribado:
intnum3= 30;
};

klaseChildCla: pampublikoAngCla
{
pampubliko:
intpamamaraan1()
{
bumalik kanum1;
}
intpamamaraan2()
{
bumalik kanum2;
}
/ * int paraan3 ()
{
ibalik ang num3;
} * /

};

intpangunahing()
{
BataCla bataObj;
intno1=bataObj.pamamaraan1();
gastos<<no1<<' n';

inthindi2=bataObj.pamamaraan2();
gastos<<hindi2<<' n';

bumalik ka 0;
}

Ang output ay:
10
dalawampu

Sa batayang klase, ang num1 ay pampubliko, ang num2 ay protektado, at ang num3 ay pribado. Sa hinango na klase, ang lahat ng mga pagpapaandar ng miyembro ay pampubliko. Ang unang pag-andar, pamamaraan1 (), ina-access ang pampublikong kasapi ng data, num1. Ang pangalawang pag-andar, paraan2 (), ina-access ang protektadong miyembro ng data, num2. Ang pangatlong pag-andar, ang paraan3 (), bagaman kasalukuyang nagkomento, dapat na ma-access ang pribadong kasapi ng data, num3.

Ang isang nagmula sa klase ay hindi idineklara nang walang access specifier (pampubliko, protektado, o pribado). Sa itaas, ang nagmula sa klase ay idineklara kasama ng tagapagpahiwatig ng publiko, iyon ay:

klaseChildCla: pampublikoAngCla{}

Ngayon un-puna ang kahulugan ng pangatlong miyembro ng pagpapaandar sa hinango na klase. Kung susubukan mong mag-ipon ng programa, tandaan na hindi ito magpo-compile, na nagbibigay ng isang mensahe ng error.

Tandaan : Kapag ang buong pinagmulang klase ay idineklarang publiko, hindi ma-access ng mga miyembro nito ang mga pribadong miyembro ng batayang klase. Gayunpaman, ang mga miyembro nito ay maaaring mag-access sa publiko at protektadong mga miyembro ng batayang klase. Inilalarawan ito ng programa sa itaas.

Gayunpaman, tandaan na ang isang pampublikong kasapi ng klase na nagmula sa publiko ay maaaring mag-access sa isang protektadong miyembro ng batayang klase.

Nagmula ng Mga pagtutukoy ng Klase at Mga Pantukoy ng Miyembro

Protektadong nagmula sa Klase kasama ang Mga Miyembro sa Publiko
Palitan ang pampubliko na tagatukoy ng protektado sa pagdedeklara ng hinango na klase sa itaas, tulad ng sumusunod:

klaseChildCla: protektadoAngCla{}

Compile at patakbuhin ang programa at tandaan na ang resulta ay pareho ng dati.

Kaya, kapag ang buong nagmula sa klase ay idineklarang protektado, hindi ma-access ng mga miyembro nito ang mga pribadong miyembro ng batayang klase. Gayunpaman, ang mga miyembro nito ay maaaring mag-access sa publiko at protektadong mga miyembro ng batayang klase. Ito ay kapareho ng kapag ang kinuhang klase ay idineklarang publiko.

Tandaan : ang isang protektadong miyembro ng klase na nagmula sa publiko ay maaaring ma-access ang isang protektadong miyembro ng batayang klase.

Pribadong Kinuhang Klase na may Mga Kasapi sa Publiko
Palitan ang protektado ng specifier ng pribado sa deklarasyon ng hinango na klase sa itaas, tulad ng sumusunod:

klaseChildCla: pribadoAngCla{}

Compile at patakbuhin ang programa at tandaan na ang resulta ay pareho ng dati.

Kaya, kapag ang buong nagmula sa klase ay idineklarang pribado, ang mga miyembro nito ay hindi maaaring ma-access ang mga pribadong miyembro ng batayang klase. Gayunpaman, ang mga miyembro nito ay maaaring mag-access sa publiko at protektadong mga miyembro ng batayang klase. Ito ay kapareho ng kung ang nagmula sa klase ay idineklarang protektado o publiko.

Public Derives Class na may Mga Protektadong Miyembro
I-type, i-compile, at patakbuhin ang sumusunod na programa, kung saan ang buong nagmula na klase ay protektado, at ang mga miyembro nito ay protektado rin. Ang ilang mga segment ng code ay ang mga sumusunod:

# isama
gamit namespaceoras;

klaseAngCla
{
pampubliko:
intnum1= 10;
protektado:
intnum2= dalawampu;
pribado:
intnum3= 30;
};

klaseChildCla: pampublikoAngCla
{
protektado:
intpamamaraan1()
{
bumalik kanum1;
}
intpamamaraan2()
{
bumalik kanum2;
}
/ * int paraan3 ()
{
ibalik ang num3;
} * /

};

intpangunahing()
{
/ * ChildCla childObj;
int no1 = bataObj.method1 ();
gastos<
/ * int no2 = childObj.method2 ();
gastos<
bumalik ka 0;
}

Gumagana ang programa tulad nito. Walang output, at hindi dapat magkaroon ng anumang output, batay sa kung paano nai-type ang programa.

Ngayon, un-puna ang kahulugan ng pagpapaandar, pamamaraan3 (), sa hinango na klase. Kung susubukan mong mag-ipon ng programa, tandaan na hindi ito magpo-compile, na nagbibigay ng isang mensahe ng error. Nangangahulugan ito na ang isang pribadong miyembro ay hindi mai-access mula sa isang function sa labas, sa labas ng operator, o nagmula sa klase. Ito ang parehong konklusyon tulad ng natapos sa itaas, tungkol sa pag-access sa isang pribadong miyembro.

Tandaan : ang isang protektadong miyembro ng protektadong nagmula sa klase ay maaaring ma-access ang isang protektadong miyembro ng batayang klase.

Ngayon, ibalik ang mga komento sa nagmula sa klase at i-un-puna ang unang segment ng code sa pangunahing () pagpapaandar. Kung susubukan mong mag-ipon ng programa, tandaan na ang programa ay hindi mag-ipon dahil sa unang segment ng code sa pangunahing () pagpapaandar. Ang epekto na ito ay hindi bago. Bukod sa nagmula sa klase, sa labas ng mga pagpapaandar, at sa labas ng mga operator, ang protektado at pribadong mga miyembro ng isang (base o nagmula) na klase ay magkapareho ng tumutukoy, pribado. Ang pangunahing () pagpapaandar ay nakikita ang protektadong miyembro ng anumang klase, base man o nagmula, tulad ng parehong specifier, pribado, at ipinagbabawal na mai-access ito.

Kung ang pangalawang segment ng code ng pangunahing () pagpapaandar ay un-puna, ang parehong paliwanag ay nalalapat. Iyon ay, ang pangunahing () pagpapaandar ay hindi ma-access ang isang protektado o pribadong miyembro ng nagmula sa klase o ng batayang klase. Ito ay malaya sa kung ang isang protektadong miyembro ng nagmula sa klase ay maaaring mag-access sa isang protektadong miyembro ng batayang klase.

Protektadong Nakuhang Klase na may Mga Protektadong Miyembro
Palitan ang pampubliko na tagatukoy ng protektado sa pagdedeklara ng hinango na klase sa itaas, tulad ng sumusunod:

klaseChildCla: protektadoAngCla{}

Ibalik ang komento ng mga segment ng code sa pangunahing () pagpapaandar, kung hindi pa ito nagagawa. Compile at patakbuhin ang programa at tandaan na ang resulta ay tulad ng dati.

Pribadong Kinuhang Klase na may Mga Protektadong Miyembro
Palitan ang protektado ng specifier ng pribado sa deklarasyon ng hinango na klase sa itaas, tulad ng sumusunod:

klaseChildCla: pribadoAngCla

Compile at patakbuhin ang programa at tandaan na ang resulta ay magiging tulad ng dati.

Public Derives Class na may Mga Pribadong Miyembro
Palitan ang pampubliko ng pantukoy sa publiko sa pagdedeklara ng hinango na klase sa itaas, tulad ng sumusunod:

klaseChildCla: pampublikoAngCla{}

Gawing pribado ang mga kasapi ng nagmula sa klase. Compile at patakbuhin ang programa. Ang resulta ay hindi naiiba mula sa Public Derived Class na may kaso na Protected Members.

Protektadong nagmula sa Klase kasama ang Pribadong Mga Miyembro
Palitan ang pampubliko na tagatukoy ng protektado sa pagdedeklara ng hinango na klase sa itaas, tulad ng sumusunod:

klaseChildCla: protektadoAngCla{}

Compile at patakbuhin ang programa. Ang resulta na ito ay hindi naiiba mula sa Protected Derived Class na may kaso na Protected Members.

Pribadong Kinuhang Klase na may Pribadong Mga Miyembro
Palitan ang protektado ng specifier ng pribado sa deklarasyon ng hinango na klase sa itaas, tulad ng sumusunod:

klaseChildCla: pribadoAngCla{}

Compile at patakbuhin ang programa. Ang resulta na ito ay hindi naiiba mula sa Pribadong Nakuha na Klase na may kaso na Protektadong Mga Miyembro.

Konklusyon

Ang mga specifier ng pag-access sa C ++ ay ang mga salitang pribado, protektado, at publiko. Napagpasyahan nila ang pag-access para sa mga miyembro ng isang klase. Ang rehiyon ng isang specifier ng pag-access ay nagsisimula mula sa label nito, hanggang sa dulo ng paglalarawan ng klase (kahulugan), o sa pagsisimula ng isa pang access specifier. Ang sinumang miyembro ng isang klase ay maaaring mag-access sa anumang iba pang miyembro ng parehong klase. Ang isang pribadong miyembro ng isang klase ay hindi ma-access ng anumang panlabas na pagpapaandar, anumang operator sa labas, o isang nagmula sa klase.

Ang miyembro ng batayang klase ay kailangang protektahan upang ang isang pribadong miyembro ng batayang klase ay ma-access ng isang kasapi ng nagmula sa klase. Ang protektadong miyembro ng base class ay makikita bilang isang pribadong miyembro ng base class ng isang panlabas na pagpapaandar o isang operator sa labas.

Ang isang pampublikong miyembro ng isang klase ay maaaring ma-access ng anumang panlabas na pagpapaandar, anumang operator sa labas, o isang nagmula sa klase.

Sa kawalan ng anumang access specifier sa isang klase, ipinapalagay ang pribadong specifier. Iyon ay, ang default na tumutukoy sa pag-access ay pribado.

Mga Sanggunian na Ginamit sa Trabaho na Ito