Barátságos funkciók, programozás C és C

Funkció, amely nem tanulót lehet hozzáféréssel a saját tagjai, ha azt nyilvánították barát (barát) osztályban. Például, a következő példában FRD () funkció bejelentett másik osztály cl:







osztály vonal
osztály doboz int színe; // színes téglalap
int upx, upy; // bal felső sarokban
int lowx, Lowy; // jobb alsó sarokban
nyilvános:
barátja int same_color (l egyenes, doboz b);
void set_color (int c);
void define_box (int x1, int y1, int x2, int y2);
void show_box ();
>;
osztály vonal int színe;
int startx, starty;
int len;
nyilvános:
barátja int same_color (line I, doboz b);
void set_color (int c);
void define_line (int x, int y, int i);
void show_line ();
>;

same_color () függvény nem tagja egyetlen osztályt, de egy barátom mindkettő. Ez igaz értékkel tér vissza, ha az objektum típusú vonal és az objektum típusa festett doboz azonos színű, és 0 - egyébként. A következő kód definiálja same_color () funkció:

// igazat ad vissza, ha a vonal és a téglalap azonos színű
int same_color (line I, doboz b)
ha (l.color == b.color) return 1;
vissza 0;
>

Mint látható, same_color () függvény számára hozzáférést kell biztosítani a saját részét a két osztályba tartozó vonal és dobozban. Mivel ez egy barátja minden osztály, azt a jogot, hogy az ilyen Dost na. Sőt, azt figyelembe, hogy mivel same_color () függvény nem tagja, akkor annak használata nem szükséges a nyilatkozat hatálya, vagy hogy az osztály nevét. Megjegyezzük, hogy az azonos célra lehet létrehozni egy tag függvény a nyilvános hozzáférés hozhatunk létre, mely visszaadja a színét tárgyak, például vonal és dobozban, valamint egy másik funkció összehasonlítására ezeket a színeket. Ez a megközelítés azonban szükség lenne egy további hívás kormányzati funkciókat, amelyek bizonyos esetekben hatástalan.







A következő program mutatja az osztály sorban és a doboz, és megmutatja, milyen barátságos vidám Ktsia elérheti a saját tagjai az osztály.

#include
#include
osztály vonal
osztály doboz int színe; // színes téglalap
int upx, upy; // bal felső sarokban
int lowx, Lowy; // jobb alsó sarokban
nyilvános:
barátja int same_color (l egyenes, doboz b);
void set_color (int c);
void define_box (int x1, int y1, int x2, int y2);
void show_box ();
>;
osztály vonal int színe;
int startx, starty;
int len;
nyilvános:
barátja int same_color (line I, doboz b);
void set_color (int c);
void define_line (int x, int y, int i);
void show_line ();
>;
// igazat ad vissza, ha a vonal és a téglalap azonos színű
int same_color (line I, doboz b)
ha (l.color == b.color) return 1;
vissza 0;
>
void box :: set_color (int c)
color = c;
>
void line :: set_color (int c)
color = c;
>
void box :: define_box (int x1, y1 int, int x2, y2 int)
upx = x1;
upy = Y1;
lowx = x2;
Lowy = y2;
>
void box :: show_box ()
int i;
szövegszín (szín);
gotoxy (upx, upy);
for (i = upx; i<=lowx; i++) cprintf("-");
gotoxy (upx, Lowy-1);
for (i = upx; i<=lowx; i++) cprintf("-");
gotoxy (upx, upy);
for (i = upy; i<=lowy; i++) cprintf (" | ");
gotoxy (upx i.);
>
gotoxy (lowx, upy);
for (i = upy; i<=lowy; i++) cprintf ("I");
gotoxy (lowx, i);
>
>
void vonal :: define_line (int x, int y, int I)
startx = x;
starty = y;
LEN = I;
>
void line :: show_line ()
int i;
szövegszín (szín);
gotoxy (startx, starty);
for (i = 0; i>
int main ()
box b;
I. vonalat;
b.define_box (10, 10, 15, 15);
b.set_color (3);
b.show_box ();
l.define_line (2, 2, 10);
l.set_color (2);
l.show_line ();
if (! same_color (I, b) pont) cout <<"Not the same.\n";
cout <<"\nPress a key.";
getch ();
// most nem egy sorban, és egy téglalapot az azonos színű
l.define_line (2, 2, 10);
l.set_color (3);
I.show_line ();
ha (same_color (l, b)) cout <<"Are the same color.\n";
vissza 0;
>

Két fontos korlátozások tekintetében a felhasználóbarát funkciók. Az első az, hogy a származtatott osztály nem örökli a felhasználóbarát funkciók. A második az, hogy a baráti funkció nem nyilvánítható a kulcsszó statikus vagy extern.




Kapcsolódó cikkek