Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






CPos pos(10,10,20,20);





CPos pos;

n В этом случае переменная pos называется представителем класса, у которого также вызывается конструктор при его создании и деструктор при его удалении из памяти.

n при создании нового экземпляра класса можно выполнять инициализацию различных переменных путем передачи их значений через конструктор. В этом случае конструктор должен быть объявлен с набором необходимых аргументов:

n class CPos
{
public:
CPos(int x1, int y1, int x2,int y2) //
конструктор
{
sp_x = x1; sp_y = y1;
// описание

ep_x = x2; ep_y = y2;
}
~CPos() {}
// деструктор

int sp_x, sp_y;
int ep_x, ep_y;
};

n процесс создания экземпляра класса принимает вид:

CPos *pos_ptr = new CPos(10,10,20,20);

или

CPos pos(10,10,20,20);

n конструктор, как и любую функцию, можно перегружать, то есть можно задать несколько типов конструкторов (с разным набором входных параметров) в одном и том же классе.

n Для описания нескольких типов конструкторов в одном классе достаточно дать их определения в нем:

n Пример:

class CPos
{
public:
CPos() {} //
конструктор

CPos(int x1, int y1, int x2,int y2) // конструктор

{
sp_x = x1; sp_y = y1;
ep_x = x2; ep_y = y2;
}
~CPos() {}
// деструктор
int sp_x, sp_y;
int ep_x, ep_y;
};

Методы класса

n В классах помимо переменных, конструкторов и деструкторов можно задавать описания и обычных функций, которые, в этом случае, называются методами.

n Это позволит: 1) не запоминать имена этих переменных, а оперировать только одной функцией и; 2) в самой функции можно реализовать необходимые проверки на истинность переданных значений координат перед их присваиванием переменным.

n Пример:

class CPos
{
public: CPos() { } ~CPos() { }

void SetParam(int x1, int y1, int x2, int y2)
{ if(x1 >= 0 && x1 <= MAX_SIZE) sp_x = x1;
if(y1 >= 0 && y1 <= MAX_SIZE) sp_y = y1;
if(x2 >= 0 && x2 <= MAX_SIZE) ep_x = x2;
if(y2 >= 0 && y2 <= MAX_SIZE) ep_y = y2; }
int sp_x, sp_y;
int ep_x, ep_y; };

Вызов функций

n Функцию можно вызывать через указатель на класс, используя оператор ‘->’ или через представитель с помощью оператора ‘.’

n Пример:

CPos* pos_ptr = new CPos();
CPos pos;
pos_ptr->SetParam(10,10,20,20);
pos.SetParam(10,10,20,20);

//Таким же образом можно обращаться и к переменным класса:

pos_ptr->sp_x = 10;
pos.sp_x = 20;

Уровни доступа

n В классах для переменных и функций предусмотрена возможность установки разных уровней доступа, которые определяются тремя ключевыми словами: public, private и protected;

n ключевое слово public означает общий доступ к переменным и функциям класса;

n уровень доступа private указывает на частный способ доступа к элементам класса и устанавливается по умолчанию при описании класса. Частный уровень доступа дает возможность обращаться к переменным и функциям только внутри класса и запрещает извне, например, через представители или указатели на класс;

n режим доступа protected также как и private запрещает доступ к элементам класса через представители и указатели, но разрешает обращаться к ним из дочерних классов при наследовании.

n Пример:

class CPos
{
public:
CPos() {}
~CPos() {}

void SetParam(int x1, int y1, int x2, int y2);
private:
int sp_x, sp_y;
int ep_x, ep_y;
};

Наследование

n на основе базового класса, который содержит общую информацию, можно построить дочерние для более детальной работы с объектами, используя механизм наследования;

n для этого после имени дочернего класса ставится символ ‘:’, а затем пишется имя базового класса с указанием уровня доступа;

n Пример:

class CPos
{ public:
CPos() {}
CPos(int x1, int y1, int x2, int y2) {SetParam(x1,y1,x2,y2);}
~CPos() {}
void SetParam(int x1, int y1, int x2, int y2);
protected:
int sp_x, sp_y;
int ep_x, ep_y; };
class CLine: public CPos
{ public:
CLine() {}
CLine(int x1,int y1, int x2, int y2) {SetParam(x1,y1,x2,y2);}
~CLine() {}
void Draw() {moveto(sp_x,sp_y); lineto(ep_x,ep_y);}

};

n Для работы с дочерним классом, также как и с обычным, необходимо создать его экземпляр либо с помощью оператора new, либо через представитель:

CLine* line_ptr = new CLine(); /* или */ CLine line;

n При создании нового объекта CLine вызывается сначала конструктор CPos() базового класса, а затем конструктор дочернего – CLine(). Таким образом, создается как бы два объекта: CPos и CLine, но они представляются как единое целое объекта CLine.

n Для работы с другими графическими примитивами (прямоугольником и эллипсом) подобным образом можно создать дочерние классы от CPos, отличающихся друг от друга реализацией функции Draw():

class CRect: public CPos
{
public:
CRect(): CPos()
{ }
CRect(int x1,int y1, int x2, int y2): CPos(x1,y1,x2,y2)
{ }
~CRect() {}
void Draw() {rectangle(sp_x,sp_y,ep_x,ep_y);} };

Иерархия классов

n class CProp // базовый класс 2

{
protected:
CProp() {}
CProp(int wdt, int clr) {SetProperty(wdt,clr);}
~CProp();
public:
void SetProperty(int wdt, int clr)
{
if(wdt >= 0 && wdt <= MAX_WIDTH) width = wdt;
if(clr >= 0 && clr <= MAX_COLOR) color = clr;
}
protected:
int width, color;
};

 

n // дочерний класс

class CLine: public CPos, public CProp

{
public:
CLine(): CPos(), CProp() {}
CLine(int x1, int y1, int x2, int y2, int w, int clr):
CPos(x1,y1,x2,y2), CProp(w,clr) {}
~CLine() {}
void Draw() {setwidth(width); setcolor(color);
moveto(sp_x, sp_y); lineto(ep_x, ep_y); }

};

n Работа с функциями класса CLine через его представитель имеет вид:

CLine line;
line.SetProperty(1,0);
line.SetParam(10,10,20,20);
line.Draw();

Виртуальные методы

n Виртуальные методы позволяют программировать действия, общие для всех производных классов, в терминах базового класса.

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

n Пример:

Date: 2015-11-15; view: 309; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию