0% нашли этот документ полезным (0 голосов)
1 просмотров31 страница

CPP 3

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

Загружено:

e102.gamma
Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
1 просмотров31 страница

CPP 3

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

Загружено:

e102.gamma
Авторское право
© All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd

Технология ООП

Санкт-Петербургский государственный политехнический университет

20 сентября 2011

Технология ООП
Спецификаторы для данных и методов

s t r u c t Man
{
char ∗ Name ;
i n t Age ;
i n t age ( ) { r e t u r n Age ; }
};

Man man ;
man . age ( ) ;
man . Age ;

Технология ООП
Спецификаторы для данных и методов

private
public
protected

c l a s s Man
{
char ∗ Name ;
i n t Age ;

public :
i n t age ( ) { r e t u r n Age ; }
};

Man man ;
man . age ( ) ;
man . Age ; // не бу де т р а б о т а т ь

Технология ООП
Конструкторы и деструкторы

Конструктор — служит для начальной инициализации объекта


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

Технология ООП
Конструктор

Носит такое же имя как и класс, не имеет типа возвращаемого


значения.
c l a s s Man
{
char Name [ 1 0 0 ] ;
i n t Age ;

public :
Man( char ∗name ) { s t r n c p y ( Name , name , 1 0 0 ) ; }
Man ( ) { s t r n c p y ( Name , " t e s t " , 1 0 0 ) ; } // к о н с т р у к т о р
по умолчанию
Man( i n t age = 1 0 0 ) { Age = age ; }
};

Технология ООП
Конструктор

Man : : Man( i n t v a l u e 1 , i n t v a l u e 2 )
{
var1 = value1 ;
var2 = 5;
}

Man : : Man( i n t v a r 1 , i n t v a r 2 ) : v a r 1 ( v a l u e 1 ) , v a r 2
(5)
{
}

Технология ООП
Конструктор копирования

Срабатывает при инициализации объекта класса другим


объектом.
c l a s s Man
{
char ∗Name ;

public :
Man( const &name ) { s t r n c p y ( Name , name . Name , 1 0 0 ) }
};

Технология ООП
Деструкторы

Срабатывает при окончании времени жизни объекта. Не имеет


параметров.
c l a s s Man
{
char ∗Name ;

public :
~Man ( ) { d e l e t e Name ; }
};

Можно вызвать деструктор явно obj-> Man();

Технология ООП
Указатель this

Указатель на текущий объект, используется неявно для


обращения к элементам объекта.
c l a s s Man
{
i n t Age ;

public :
i n t age ( ) { r e t u r n Age ; }
Man ∗ o b j ( ) { r e t u r n t h i s ; }
// i n t age ( ) { r e t u r n t h i s −>Age ; }
};

Технология ООП
Дружественные функции

Дружественные функции позволяют получить доступ к private


членам класса.
c l a s s Man
{
i n t Age ;
f r i e n d v o i d s e t A g e (Man ∗ , i n t ) ;

public :
v o i d s e t A g e ( i n t age ) { Age = age ; }
};

v o i d s e t A g e (Man ∗man , i n t age )


{
man−>Age = age ;
}

Технология ООП
Дружественные функции

c l a s s Man ;
c l a s s User
{
public :
v o i d age (Man &, i n t ) ;
};
c l a s s Man
{
i n t Age ;
f r i e n d v o i d U s e r : : age (Man &, i n t ) ;
};
v o i d U s e r : : age (Man &man , i n t age )
{
man . Age = age ;
}

Технология ООП
Дружественный класс
Дружественный класс позволяет сделать все функции класса
дружественными.
c l a s s Man ;
c l a s s User
{
public :
v o i d age (Man &, i n t ) ;
};
c l a s s Man
{
i n t Age ;
f r i e n d c l a s s User ;
};
v o i d U s e r : : age (Man &man , i n t age )
{
man . Age = age ;
}

Технология ООП
Статические члены класса

Члены класса для которых память выделяется один раз при


создании класса.
c l a s s Man
{
private :
s t a t i c i n t count ;
public :
s t a t i c i n t getCount ( ) { return count ; }
};

i n t x = Man : : g e t C o u n t ( ) ;

Технология ООП
Спецификатор const
Используется для предотвращения изменения данных.
c l a s s Man
{
private :
i n t Age ;
public :
v o i d age ( i n t _age ) const // нельзя изменять члены
класса
{
Age = _age ; // ошибка
}

v o i d cha n ge ( const Man& man )


{
man . Age = 5 ; // ошибка
}
};

Технология ООП
Перегрузка операций

В C++ можно перегрузить любые операции, кроме: ’.’, ’.*’,


’ ?:’, ’::’, ’#’, ’##’, ’sizeof’.
Для стандартных типов переопределить операции нельзя.
Функции-операции не могут иметь аргументов по
умолчанию, наследуются за исключением операции ’=’.
При перегрузке сохраняется число аргументов, а также
приоритет операции.
тип o p e r a t o r операция ( список параметров ) { тело
функции}

Технология ООП
Перегрузка унарных операций

c l a s s Man
{
i n t Age ;
Man & o p e r a t o r ++() { ++Age ; r e t u r n ∗ t h i s ; }
};

Man man ;
++man ;

Технология ООП
Перегрузка бинарных операций

c l a s s Man
{
i n t Age ;
public :
i n t getAge ( ) { r e t u r n Age ; }
};

bool o p e r a t o r >( const Man &m1 , const Man &m2)


{
i f (m1 . getAge ( ) > m2 . getAge ( ) )
return true ;
return f a l s e ;
}

Технология ООП
Перегрузка бинарных операций

c l a s s Man
{
i n t Age ;

Man o p e r a t o r +( const Man &m2)


{
Man temp ;
temp . Age = Age + m2 . Age ;
r e t u r n temp ;
}
};
Man man1 , man2 ;
man1 = man1 + man2 ;

Технология ООП
Операция присваивания

c l a s s Man
{
i n t Age ;
char ∗Name ;

const Man & o p e r a t o r = ( const Man &m1) { ... }


};

Технология ООП
Безопасный массив

Перегрузить для класса массив операцию [].


//TODO

Технология ООП
Наследование

c l a s s имя : [ p r i v a t e | p r o t e c t e d | p u b l i c ]
базовый_класс

Простое наследование — наследование от одного родителя.

Технология ООП
Простое наследование

c l a s s Man
{
char ∗Name ;
i n t Age ;
};

c l a s s Stud : p u b l i c Man
{
i n t Course ;
};

c l a s s P r o f : p u b l i c Man
{
char ∗ Dept ;
};

Технология ООП
Простое наследование

c l a s s Man
{
char ∗Name ;
i n t Age ;
};

c l a s s Stud : p u b l i c Man
{
i n t Course ;
};

c l a s s P r o f : p u b l i c Man
{
char ∗ Dept ;
};

Технология ООП
Простое наследование
c l a s s Man
{

char ∗Name ;
i n t Age ;
public :
i n t getAge ( ) { r e t u r n Age ; }
};

c l a s s Stud : p u b l i c Man
{
i n t Course ;
public :
i n t getAge ( ) { r e t u r n getAge ( ) ; } //FIXME
Stud ( ) { p r i n t f ( "%d\n" , getAge ( ) ) ; }
};

c l a s s P r o f : p u b l i c Man
{
char ∗ Dept ; Технология ООП
Вызов конструкторов и деструкторов при наследовании

Конструкторы вызываются от более старшего класса к


младшему, деструкторы наоборот.

Технология ООП
Множественное наследование

class A { . . . };
class B : public A { . . . };
class C : public A { . . . };
class D : public A, public B, public C { . . . };

Объект класса D содержит унаследованные члены класса A в


3х экземплярах.

Технология ООП
Множественное наследование

class A { . . . };
class B : virtual public A { . . . };
class C : virtual public A { . . . };
class D : public A, public B, public C { . . . };

Технология ООП
Виртуальные методы

Man ∗man = new Stud ;


man−>age ( ) ;

Будет вызван метод класса Man. Механизм раннего


связывания.

Технология ООП
Виртуальные методы

v i r t u a l i n t age ( ) { . . . }

Man ∗man , ∗man2 ;


man = new Stud ;
man2 = new Man ;

man−>age ( ) ;
man2−>age ( ) ;

Механизм позднего связывания.

Технология ООП
Виртуальные методы

Если в базовом классе метод виртуальныaй, то в


производном классе такойже метод становится
автоматически виртуальным.
Виртуальные методы наследуются.
Нельзя объявить как static.
Можно определить вирутальный метод, как «чисто
виртуальный» присвоив ему значение 0.
Деструктор базового класса как правило всегда следует делать
виртуальным, чтобы избежать утечек памяти.

Технология ООП
Абстрактные классы

Абстрактный класс — класс имеющий «чисто виртуальные»


функции, объект такого класса не может быть создан, а только
унаследован.

Технология ООП

Вам также может понравиться