Характеристики объектно-ориентированных языков. Конструкторы и деструкторы. Дружественные функции, страница 4

// описание функций членов класса line

void line::set_color(int c)

{

color=c;

}

void line::define_line(int x,int y,int l)

{

startx=x;starty=y;len=l;

}

void line::show_line(void)

{

textcolor(color);

gotoxy(startx,starty);

for(int k=0;k<len;k++)

cprintf("%c",'=');

textcolor(WHITE);

}

//описание дружественной функции

int same_color(line l,box b)

{

if(l.color==b.color)

return 1;

return 0;

}

main(void)

{

line l;

box b;

textbackground(BLACK);

clrscr();

b.define_box(5,5,25,10);

b.set_color(RED);

l.define_line(5,15,30);

l.set_color(3);

b.show_box();

l.show_line();

gotoxy(1,1);

if(same_color(l,b))

cputs("цвет совпал \n");

else

cputs("цвет различный \n");

getch();

b.define_box(45,6,70,11);

b.set_color(GREEN);

l.define_line(45,16,30);

l.set_color(2);

b.show_box();

l.show_line();

gotoxy(41,2);

if(same_color(l,b))

cputs("цвет совпал \n");

else

cputs("цвет различный \n");

getch();

return 0;

}

 

//использование дружественных классов

//

//

#include <iostream.h>

#include <conio.h>

class line; //предварительное объявление класса

class box {  //объявляем класс

int color;

int upx,upy;

int lowx,lowy;

public:

friend int same_color(line l,box b);

void set_color(int c);

void define_box(int x1,int y1,int x2,int y2);

void show_box(void);

};

class line{  //объявляем класс

int color;

int startx,starty;

int len;

public:

friend int same_color(line l,box b);

void set_color(int c);

void define_line(int x,int y,int l);

void show_line(void);

};

//описание функций класса box

void box::set_color(int c)

{

color=c;

}

void box::define_box(int x1,int y1,int x2,int y2)

{

upx= x1;lowx=x2;

upy=y1;lowy=y2;

}

void box::show_box(void)

{

window(upx,upy,lowx,lowy);

textbackground(color);

clrscr();

textbackground(BLACK);

window(1,1,80,25);

}

 
 


В нашем примере дружественной была объявлена внешняя функция, а может быть и функция –член  другого класса. Можно было объявить функцию same_color() функцией – членом класса box, а в классе line – дружественной функцией.  Тогда необходимы будут следующие изменения:

class box {  //объявляем класс

int color;

int upx,upy;

int lowx,lowy;

public:

int same_color(line l);

void set_color(int c);

void define_box(int x1,int y1,int x2,int y2);

void show_box(void);

};

class line{  //объявляем класс

int color;

int startx,starty;

int len;

public:

friend int box::same_color(line l);

void set_color(int c);

void define_line(int x,int y,int l);

void show_line(void);

};

 
 


А выглядеть новая функция box::same_color (line l)  может следующим образом:

int box::same_color(line l);

{

if(l.color==color)

return 1;

return 0;

}

 
 


Аргументы функции, задаваемые по умолчанию

#include <iostream.h>

#include <conio.h>

void stringxy(char* str,int x=-1,int y=-1); //прототип функции с аргументами по умолчанию

main(void)

{

clrscr();

stringxy("это линия 11",1,11);

getch();

stringxy(" продолжение на той же строке");

getch();

stringxy("это линия 13",20,13);

getch();

stringxy("с позиции 60\n",60);

getch();

return 0;

}

void stringxy(char* str,int x,int y) // описание функции

{

if(x==-1)x=wherex(); // возвращает текущие координаты курсора  х

if(y==-1)y=wherey(); //       -- --||-- --||-- --||--- ---                                  y

gotoxy(x,y);

cout<<str;

}