Основы языка программирования C++ с применением объектно-ориентированного программирования. Чернышов М.К. - 52 стр.

UptoLike

Составители: 

Dog(char *nm):Pet(nm){};
};
struct Cat:public Pet
{
virtual void speak()
{cout<<name<<“ ɝɨɜɨɪɢɬ “<<“ Ɇɹɭ-Ɇɹɭ”<<endl;}
Cat(char *nm):Pet(nm){};
}
int main()
{
Pet *mypets[]={new Dog(“ɒɚɪɢɤ”), new Cat(“Ɇɭɪɤɚ”),
new Dog(“Ɋɵɠɢɣ“)}; // ɋɩɢɫɨɤ ɠɢɜɨɬɧɵɯ
const int sz=sizeof(mypets)/sizeof(mypets[0]);
for(int k=0: k<sz; k++)
mypets[k]->speak();
return 0;
}
4.6. «Ⱦɪɭɠɟɫɬɜɟɧɧɵɟ» (friend) ɮɭɧɤɰɢɢ
Ɏɭɧɤɰɢɹ, ɨɛɴɹɜɥɟɧɧɚɹ ɜ ɩɪɨɢɡɜɨɞɧɨɦ ɤɥɚɫɫɟ, ɦɨɠɟɬ ɢɦɟɬɶ ɞɨɫɬɭɩ
ɬɨɥɶɤɨ ɤ ɡɚɳɢɳɟɧɧɵɦ (
protected) ɢɥɢ ɨɛɳɢɦ (public) ɤɨɦɩɨɧɟɧɬɚɦ ɛɚ-
ɡɨɜɨɝɨ ɤɥɚɫɫɚ.
Ɏɭɧɤɰɢɹ, ɨɛɴɹɜɥɟɧɧɚɹ ɜɧɟ ɤɥɚɫɫɚ, ɦɨɠɟɬ ɢɦɟɬɶ ɞɨɫɬɭɩ ɬɨɥɶɤɨ ɤ ɨɛ-
ɳɢɦ (
public) ɤɨɦɩɨɧɟɧɬɚɦ ɤɥɚɫɫɚ ɢ ɨɛɪɚɳɚɬɶɫɹ ɤ ɧɢɦ ɩɨ ɢɦɟɧɢ, ɭɬɨɱɧɟɧ-
ɧɨɦɭ ɢɦɟɧɟɦ ɨɛɴɟɤɬɚ ɢɥɢ ɭɤɚɡɚɬɟɥɹ ɧɚ ɨɛɴɟɤɬ.
ɑɬɨɛɵ ɩɨɥɭɱɢɬɶ ɞɨɫɬɭɩ ɤ ɥɢɱɧɵɦ ɤɨɦɩɨɧɟɧɬɚɦ ɨɛɴɟɤɬɨɜ ɧɟɤɨɬɨɪɨɝɨ
ɤɥɚɫɫɚ
ɏ ɜ ɮɭɧɤɰɢɢ, ɧɟ ɢɦɟɸɳɟɣ ɤ ɧɢɦ ɞɨɫɬɭɩɚ, ɷɬɚ ɮɭɧɤɰɢɹ ɞɨɥɠɧɚ ɛɵɬɶ
ɨɛɴɹɜɥɟɧɚ ɞɪɭɠɟɫɬɜɟɧɧɨɣ (
friend) ɜ ɤɥɚɫɫɟ X:
class X
{
friend void Y:: fprv( int, char*);
/* Ⱦɪɭɝɢɟ ɤɨɦɩɨɧɟɧɬɵ ɤɥɚɫɫɚ X */
}
Ɇɨɠɧɨ ɨɛɴɹɜɢɬɶ ɜɫɟ ɮɭɧɤɰɢɢ ɤɥɚɫɫɚ
Y ɞɪɭɠɟɫɬɜɟɧɧɵɦɢ ɜ ɤɥɚɫɫɟ X:
class Y;
class X
{
friend Y;
/* Ⱦɪɭɝɢɟ ɤɨɦɩɨɧɟɧɬɵ ɤɥɚɫɫɚ X */
}
class Y
{
void fy1(int, int);
int fy2(char*, int);
/* Ⱦɪɭɝɢɟ ɤɨɦɩɨɧɟɧɬɵ ɤɥɚɫɫɚ Y */
}
52
        Dog(char *nm):Pet(nm){};
        };
     struct Cat:public Pet
        {
        virtual void speak()
           {cout<speak();
        return 0;
        }

4.6. «Ⱦɪɭɠɟɫɬɜɟɧɧɵɟ» (friend) ɮɭɧɤɰɢɢ

    Ɏɭɧɤɰɢɹ, ɨɛɴɹɜɥɟɧɧɚɹ ɜ ɩɪɨɢɡɜɨɞɧɨɦ ɤɥɚɫɫɟ, ɦɨɠɟɬ ɢɦɟɬɶ ɞɨɫɬɭɩ
ɬɨɥɶɤɨ ɤ ɡɚɳɢɳɟɧɧɵɦ (protected) ɢɥɢ ɨɛɳɢɦ (public) ɤɨɦɩɨɧɟɧɬɚɦ ɛɚ-
ɡɨɜɨɝɨ ɤɥɚɫɫɚ.
    Ɏɭɧɤɰɢɹ, ɨɛɴɹɜɥɟɧɧɚɹ ɜɧɟ ɤɥɚɫɫɚ, ɦɨɠɟɬ ɢɦɟɬɶ ɞɨɫɬɭɩ ɬɨɥɶɤɨ ɤ ɨɛ-
ɳɢɦ (public) ɤɨɦɩɨɧɟɧɬɚɦ ɤɥɚɫɫɚ ɢ ɨɛɪɚɳɚɬɶɫɹ ɤ ɧɢɦ ɩɨ ɢɦɟɧɢ, ɭɬɨɱɧɟɧ-
ɧɨɦɭ ɢɦɟɧɟɦ ɨɛɴɟɤɬɚ ɢɥɢ ɭɤɚɡɚɬɟɥɹ ɧɚ ɨɛɴɟɤɬ.
    ɑɬɨɛɵ ɩɨɥɭɱɢɬɶ ɞɨɫɬɭɩ ɤ ɥɢɱɧɵɦ ɤɨɦɩɨɧɟɧɬɚɦ ɨɛɴɟɤɬɨɜ ɧɟɤɨɬɨɪɨɝɨ
ɤɥɚɫɫɚ ɏ ɜ ɮɭɧɤɰɢɢ, ɧɟ ɢɦɟɸɳɟɣ ɤ ɧɢɦ ɞɨɫɬɭɩɚ, ɷɬɚ ɮɭɧɤɰɢɹ ɞɨɥɠɧɚ ɛɵɬɶ
ɨɛɴɹɜɥɟɧɚ ɞɪɭɠɟɫɬɜɟɧɧɨɣ (friend) ɜ ɤɥɚɫɫɟ X:
    class X
       {
       friend void Y:: fprv( int, char*);
       /* Ⱦɪɭɝɢɟ ɤɨɦɩɨɧɟɧɬɵ ɤɥɚɫɫɚ X */
       }
Ɇɨɠɧɨ ɨɛɴɹɜɢɬɶ ɜɫɟ ɮɭɧɤɰɢɢ ɤɥɚɫɫɚ Y ɞɪɭɠɟɫɬɜɟɧɧɵɦɢ ɜ ɤɥɚɫɫɟ X:
    class Y;
    class X
       {
       friend Y;
       /* Ⱦɪɭɝɢɟ ɤɨɦɩɨɧɟɧɬɵ ɤɥɚɫɫɚ X */
       }
    class Y
       {
       void fy1(int, int);
       int fy2(char*, int);
       /* Ⱦɪɭɝɢɟ ɤɨɦɩɨɧɟɧɬɵ ɤɥɚɫɫɚ Y */
       }


                                 52