Углубленное изучение отдельного раздела: стандартные классы С++

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

µтся, но не присваивается.

Дружественность не наследуется: если А объявляет В другом, то классы, производные от В, не будут автоматически друзьями А.

Дружественность не транзитивна: если А объявляет В другом, то классы, производные от А, не будут автоматически признавать В своим другом.

 

ИСПОЛЬЗОВАНИЕ КЛАССА

 

Следует четко понимать, что в момент объявления класса и определения его функций-членов самих объектов или экземпляров класса не существует. Классы - это не объекты. Объектами являются переменные, экземпляры классов которые должны создаваться в программе. Приведем пример использования класса:main()

{cnt; //создание объекта cnt типа TCounter

.SetValue(10); //вызов метода для инициализации

//определение и инициализация указателя на объект* p = &cnt;i = p->GetValue();//использование указателя

//определение ссылки& Rp = &cnt;= Rp.GetValue(); //использование ссылки

//Определение массива указателей* m[10];

//Создание и инициализация объектов(int k = 0; k < 10; k++) {

m[k] = new TCounter;[k]->SetValue(0);

}

//Освобождение памяти(i = 0; i < 10; i++) delete m[i];

}

УПРАВЛЕНИЕ ДОСТУПОМ К КЛАССУ

 

Для ограничения уровня доступа к данным и функциям-членам класса в С++ существуют три ключевых слова private: (частный), protected: (защищенный), public: (общедоступный), задающие уровни доступа в классе. Каждый раздел в классе начинается с одного из приведенных слов. Если ни одно из ключевых слов не использовалось, то все объявления в классе считаются частными. Разделы с разными привилегиями доступа могут появляться в любом порядке и в любом количестве. Рассмотрим пример.Example {x1; // частные по умолчаниюf1();

protected:x2; // защищенныеf2();:x3; // опять частныеf3();:

int x4; // общедоступные

inf f4();

};

Частные члены класса

Частные члены класса имеют наиболее ограниченный доступ. К частным членам класса имеют доступ только функции-члены данного класса или классы и функции объявленные как дружественные (friend) к данному классу, например:

class TPrivateClass {value;GetValue();

};

TPrivateClass::GetValue() {value; //доступ разрешен

}main() {cl; //создание объектаi = cl.value; //ошибка! Нет доступа= cl.GetValue();//ошибка! Нет доступа

}

Защищенные члены класса

Члены и функции объявленные в защищенном (protected) разделе класса доступны только для функций производных классов. Обычно в этом возникает необходимость тогда, когда разрабатываемый класс является базовым классом для других классов. В этом случае он ограничивает доступ к данным внешним пользователям и разрешает доступ для классов наследников. Рассмотрим пример иерархии объектов:

class A {

protected:

int val;

};

class B: public A { //наследуется от A:

void fb();

};

void B::fb() { val = 0; } //доступ разрешен

C:public B { //наследуется от B:fc();

};C::fc() {val = 10;} //доступ разрешен

В данном примере приведена иерархия классов A->B->C. Свойство защищенности распространяется вниз по иерархии до тех пор пока производный класс объявляет свой базовый общедоступным (public). При этом любые функции-члены в классах C и B имеют доступ к члену данных val базового класса. Если функция-член производного класса в качестве входного параметра имеет указатель или ссылку на объект базового класса, то правила становятся другими. Модифицируем класс C следующим образом:C:public B {:fc(A&); //Входной параметр ссылка на базовый класс

};C::fc(A& a) {= 10; //доступ разрешен.val = 10; //ошибка! нарушение прав доступа

}

Общедоступные члены классаобщедоступными членами класса все обстоит намного проще. Доступ к общедоступным членам класса разрешен функциям-членам самого класса, производных классов и обычным пользователям класса.

 

ПРИМЕР РЕАЛИЗАЦИИ И ИСПОЛЬЗОВАНИЯ КЛАССА

 

Передо мной поставлена следующая задача:

использовать графические средства компилятора Borland C 3.1.

Для этого был реализован класс Car (машина), с внедненными в него публичными методами draw(), clear() и run().

Метод draw() - отвечает за рисование (прорисовку) машины на экране.

Метод clear() - отвечает за удаление машины с экрана.

Метод run() - отвечает за движение машины на экране, по заданным координатам.

 

Программа

 

#include

#include

#include

#include

#include

#include

// Класс - Автомобиль

class Car

{

// Направление движения (право-лево, верх-низ)

int dx,dy;bkcolor;

// Рисует машину направленную вперёд

void draw_forward()

{(WHITE);(x,y,x+80,y);(x,y,x,y+50);(x+80,y,x+80,y+50);(x,y+50,x+10,y+50);(x+30,y+50,x+50,y+50);(x+70,y+50,x+80,y+50);(x+20,y+50,0,180,10);(x+60,y+50,0,180,10);(x+80,y+40,x+90,y+45);(x+90,y+10,x+90,y+50);(x+90,y+50,0,90,40);(x+90,y+50,x+100,y+50);(x+120,y+50,x+130,y+50);(x+110,y+50,0,180,10);(x+95,y+15,x+95,y+35);(x+95,y+35,x+115,y+35);(x+95,y+35,0,90,20);(1,bkcolor);(x+10,y+10,WHITE);(1,BROWN);(x+105,y+15,WHITE);(x+110,y+50,8);(x+20,y+50,8);(x+60,y+50,8);(1,RED);(x+115,y+50,WHITE);(x+25,y+50,WHITE);(x+65,y+50,WHITE);(x+25,y+20,"ANNA252-10");

}

// Рисует машину направленную назад

void draw_backward()

{(WHITE);(x,y,x-80,y);(x,y,x,y+50);(x-80,y,x-80,y+50);(x,y+50,x-10,y+50);(x-30,y+50,x-50,y+50);(x-70,y+50,x-80,y+50);(x-20,y+50,0,180,10);(x-60,y+50,0,180,10);(x-80,y+40,x-90,y+45);(x-90,y+10,x-90,y+50);(x-90,y+50,90,180,40);(x-90,y+50,x-100,y+50);(x-120,y+50,x-130,y+50);(x-110,y+50,0,180,10);(x-95,y+15,x-95,y+35);(x-95,y+35,x-115,y+35);(x-95,y+35,90,180,20);(1,bkcolor);(x-10,y+10,WHITE);(1,BROWN);(x-105,y+15,WHITE);(x-110,y+50,8);(x-20,y+50,8);(x-60,y+50,8);(1,RED);(x-115,y+50,WHITE);(x-25,y+50,WHITE);(x-65,y+50,WHITE);(x-55,y+20,"ANNA252-10");

}

public:

// координаты автомобиля

int x,y;

Car(int x_, int y_, int dx_, int dy_)

{=dx_;=dy_;=x_;=y_;=random(7)+1;

}

~Car(){}

// Рисуем машинуdraw()

{(dx==1) draw_forward();draw_backward();

}

// Удаляем машину с экранаclear()

{(1,BLACK);(x,y,x+130*dx,y+60);

}

// Движение машиныrun()

{((x>=getmaxx())||(x=getmaxy())||(y<=0)) dy=-dy;+=5*dx;

y+=dy;

}};

// Главная программа

void main()

{gd=DETECT, gm;(&gd,&gm,"");

randomize();

// Объявляем 3 экземпляра класса в разных координа