Углубленное изучение отдельного раздела: стандартные классы С++
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
µтся, но не присваивается.
Дружественность не наследуется: если А объявляет В другом, то классы, производные от В, не будут автоматически друзьями А.
Дружественность не транзитивна: если А объявляет В другом, то классы, производные от А, не будут автоматически признавать В своим другом.
ИСПОЛЬЗОВАНИЕ КЛАССА
Следует четко понимать, что в момент объявления класса и определения его функций-членов самих объектов или экземпляров класса не существует. Классы - это не объекты. Объектами являются переменные, экземпляры классов которые должны создаваться в программе. Приведем пример использования класса: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 экземпляра класса в разных координа