- •2.Операторы new, delete.
- •4. Перегрузка функций.
- •5. Ссылки. Назначение и особенности использования.
- •10. Классы и объекты. Члены классов. Атрибуты доступа.
- •11. Описание классов. Видимость и доступ к членам классов.
- •12. Функции-члены классов. Описание, вызов.
- •13. Инициализация объектов классов. Назначение, типы конструкторов.
- •14. Инициализация объектов классов. Описание конструкторов.
- •15. Особенности описания и использования конструкторов копирования.
- •16. Деструкторы. Назначение, описание, использование.
- •17. Пример описания конструктора копирования для класса со структурными членами-данными (массива).
- •24. Пример использования функции-друга.
- •25. Перегрузка операторов. Назначение, правила, способы.
- •26. Перегрузка операторов с использованием операторных-функций. Указатель this.
- •27. Перегрузка операторов с использованием дружественных функций.
- •28. Поразрядное копирование. Особенности перегрузки оператора присваивания.
- •29. Перегрузка операторов отношений. Примеры.
- •30. Перегрузка логических операторов. Примеры.
- •31. Перегрузка арифметических операторов. Примеры.
- •33. Перегрузка оператора ”[ ]” для класса со структурными членами-данными (массива).
- •37. Наследование. Конструкторы и деструкторы.
- •38. Наследование. Видимость и доступ к членам базовых и производных классов.
- •39. Статический (перегрузка операторов, функций, функций-членов, конструкторов) полиморфизм.
- •40. Пример описания класса на базе одиночного наследования.
- •41. Функции-шаблоны. Назначение, описание, использование.
- •42. Пример описания и вызова функции-шаблон для суммирования элементов массива.
- •45. Характеристика пространства имен.
- •46. Описание и использование пространства имен (на примере).
- •47. Понятие исключительная ситуация и способы обработки исключений.
- •50. 51.Синтаксис и использование команды try, catch. Варианты использования catch. Генерация исключений командой throw.
- •52. Варианты генерации и обработки исключений.
- •Istream iostrim ostream
- •Ifstream fstream ofstream
- •64. Пример создания и заполнения файла.
- •65. Пример открытия и чтения содержимого файла.
- •66. Пример заполнения файла записями (значение-значение, размещенными в полях 20 и 30 позиций, с прижатием соответственно влево и вправо).
33. Перегрузка оператора ”[ ]” для класса со структурными членами-данными (массива).
Оператор индексации [ ] по правилам перегрузки считается бинарным. Из этого следует, что операторная функция должна иметь параметр, который задает индекс.
Чтобы использование операторная [ ] сделать возможным в левой и в правой частях оператора присваивания для одномерных массивов, операторная функция должна возвращать ссылку на элемент массива. В этом случае можно будет как передавать значение индекса в класс, так и получать значение индекса в класс, так и получать значение элемента массива класса с заданным индексом.
#include <iostream.h>
class strukt {
public: struct Node { char m_name[15];
char m_autor[15];
int m_page;
int m_kol;
} x[3];
strukt (char *name, char *autor, int page, int kol)
{ strcpy(x.m_name, name);
strcpy(x.m_autor, autor);
x.m_page=page;
x.m_kol=kol;
}
strukt (strukt &obj)
{ strcpy(x.m_name, obj.x.m_name);
strcpy(x.m_autor, obj.x.m_autor);
x.m_page=obj.x.m_page;
x.m_kol=obj.x.m_kol;
}
TO_SHOW()
{ cout<<x.m_name<<endl<<x.m_autor<<endl<<x.m_page<<endl<<x.m_kol<< endl<<endl; }
int operator[](int Index)
{ if (Index>=0)
return x[Index];
else cout<<”ERROR”;
}
};
34. Перегрузка оператора ”=” для класса со структурными членами-данными (массива).
#include <iostream.h>
#include <string.h>
class strukt {
public: struct Node { char m_name[15];
char m_autor[15];
int m_page;
int m_kol;
} x;
strukt (char *name, char *autor, int page, int kol)
{ strcpy(x.m_name, name);
strcpy(x.m_autor, autor);
x.m_page=page;
x.m_kol=kol;
}
strukt (strukt &obj)
{ strcpy(x.m_name, obj.x.m_name);
strcpy(x.m_autor, obj.x.m_autor);
x.m_page=obj.x.m_page;
x.m_kol=obj.x.m_kol;
}
TO_SHOW()
{cout<<x.m_name<<endl<<x.m_autor<<endl<<x.m_page<<endl<<x.m_kol<< endl<<endl;
}
strukt& operator=(strukt &obj)
{ strcpy(x.m_name, obj.x.m_name);
strcpy(x.m_autor, obj.x.m_autor);
x.m_page=obj.x.m_page;
x.m_kol=obj.x.m_kol;
return *this;
}
};
int main ()
{ strukt y1("mama", "papa", 45, 87), y2("wawa", "kaka", 54, 98);
y1.TO_SHOW();
y2.TO_SHOW();
y1=y1;
y1.TO_SHOW();
}
35. Перегрузка оператора ”=” для класса с динамическими членами-данными (динамической строки).
#include <iostream.h>
#include <string.h>
class String {
private: char *str;
public: String()
{
str= new char;
str='\0';
}
String (char *s)
{
int kol=strlen(s);
str=new char (kol);
if (!str)
cout<<"ERROR";
strcpy(str, s);
}
String (String &obj)
{
int kol=strlen(obj.str);
str=new char (kol);
if (!str)
cout<<"ERROR";
strcpy(str, obj.str);
}
TO_SHOW()
{
cout<<str<< endl<<endl;
}
String& operator=(String &obj)
{
int kol=strlen(obj.str);
if (kol > strlen(str))
{
delete [] str;
str=new char (kol);
if (!str)
cout<<"ERRoR";
strcpy(str, obj.str);
}
return *this;
}
/*
~ String ()
{
delete [] str;
}
*/
};
int main ()
{
String x1(), x2("mama"), x3("papa");
x2.TO_SHOW();
x3.TO_SHOW();
x2=x3;
x2.TO_SHOW();
return 0;
}
36. Наследование. Базовый и производные классы. Описание, спецификаторы доступа.
Наследование - один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с инкапсуляцией, полиморфизмом и абстракцией), позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом. Другими словами, класс-наследник реализует спецификацию уже существующего класса (базовый класс). Это позволяет обращаться с объектами класса-наследника точно так же, как с объектами базового класса.
Базовый – класс который наследуется. Производный – новый класс.
Пример:
class A{ //базовый класс
};
class B : public A{ //public наследование
}
class C : protected A{ //protected наследование
}
class Z : private A{ //private наследование
}
В C++ существует три типа наследования: public, protected, private. Спецификаторы доступа членов базового класса меняются в потомках следующим образом:
при public-наследовании все спецификаторы остаются без изменения.
при protected-наследовании все спецификаторы остаются без изменения, кроме спецификатора public, который меняется на спецификатор protected (то есть public-члены базового класса в потомках становятся protected).
при private-наследовании все спецификаторы меняются на private. Существуют одиночное и множественное наследование. А также прямое и косвенное.