
- •Абстрактные классы.
- •Аргументы функций по умолчанию.
- •Арифметические операции с указателями и с указателями на массивы.
- •Ввод-вывод в символьные массивы.
- •Виртуальные классы. Порядок вызова конструкторов и деструкторов.
- •Виртуальные функции.
- •Виртуальные функции-члены.
- •Виртуальный деструктор. Абстрактные классы.
- •Динамическая память. Указатели и массивы. Ссылочный тип.
- •Доступ к глобальным переменным, скрытым локальными переменными с тем же именем (оператор ::).
- •Доступ к членам базовых классов внутри производного класса.
- •Доступ к элементам массива. Вычисление размера массива. Многомерные массивы.
- •Дружественные классы и функции.
- •Закрытые, защищенные и открытые элементы класса.
- •Иерархия классов. Иерархия наследования классов.
- •Инициализация и разрушение (конструкторы и деструкторы).
- •Инициализация массивов по умолчанию. Явная инициализация массивов.
- •Инициализация безразмерных массивов
- •1. Инкапсуляция
- •2. Полиморфизм
- •3. Наследовние
- •22.Использование new и delete на примере динамических массивов, стеков, очередей.
- •Указатель this
- •Указатели на структуру
- •Массивы структур
- •Классы и объекты. Класс как структура.
- •Классы. Спецификаторы доступа public, protected, private.
- •Константные (const) и изменяемые (mutable) члены класса.
- •Конструктор копирования для контейнерного класса.
- •Конструкторы и деструкторы.
- •Конструкторы и способы обращения к ним.
- •Логические операции. Инкремент и декремент. Арифметические операции.
- •Объявление переменной массива
- •Множественное наследование.
- •Модификатор константы. Модификатор volatile. Модификатор const
- •Модификатор volatile
- •Модификатор const
- •Модификатор volatile
- •Объединения: синтаксис и правила.
- •Объединения: создание простого объединения. Использование enum.
- •41. Объекты стандартного предопределенного потокового ввода-вывода cin, cout, cerr, clog.
- •Объявление переменных указателей. Простые операторы с указателями.
- •Оператор if. Оператор if-else. Вложенные операторы if-else. Оператор if-else-if.
- •If (условие_истинно) оператор; else оператор;
- •If (условие_истинно)
- •Операторы динамического распределения памяти (new, delete).
- •Операции динамического распределения памяти.
- •Операции отношения и логические операции. Условная операция. Операции сравнения (Операции отношений)
- •Логические операции.
- •Операция присваивания. Приоритет операций.
- •Определение первичного класса.
- •Определение переменных указателей. Инициализация указателей.
- •Организация списка объектов различного типа. Техническая реализация
- •Параметризованная очередь. Параметризованный стек. Параметризованное бинарное дерево.
- •Int max_len; /* Максимальная длина стека */
- •Int top; /* Индекс элемента в вершине стека */
- •Параметризованный класс двухсвязного списка.
- •58. Перегрузка операций
- •59. Перегрузка для труктур
- •Передача значений параметров по умолчанию. Передача параметров по ссылке и ссылочные переменные.
- •Передача параметра по ссылке
- •Передача структур в функции. Создание массива структур.
- •63. Подставляемые функции (inline-функции).
- •Преобразования указателей на объекты
- •65. Приведите пример использования enum.
- •66. Приведите пример использования inline-функции.
- •67. Приведите пример использования аргументов функций по умолчанию.
- •68. Приведите пример использования арифметических операции с указателями.
- •69. Приведите пример использования виртуальных функций
- •70. Приведите пример использования вызова функций по значению и вызов по ссылке.
- •71. Приведите пример использования дружественных функции.
- •72. Приведите пример использования конструкторов и деструктора.
- •73.Приведите пример использования массива структур.
- •Приведите пример использования перегрузки функций.
- •81. Приведите пример использования указателей и массивов.
- •82. Приведите пример использования условного оператора
- •83.Приведите пример использования циклов for, while, do-while.
- •84. Приведите пример использования шаблонов функций.
- •Принципы организации позднего связывания.
- •Приоритет переменных с файловой и локальной областями действия. Операция уточнения области действия.
- •Производные классы. Доступ к полям и функциям базового класса.
- •88. Простой класс. Вложенные классы
- •Пространство имен. Операторы namespace и using. Пространство имен
- •Прототипы функций. Вызов функций по значению и вызов по ссылке. Область действия. Рекурсия.
- •91.Работа с файлами последовательного и произвольного доступа.
- •92.92.Переменные
- •Где объявляются переменные
- •Локальные переменные
- •Вопрос 95
- •96 Соглашения об именах
- •Тело класса и составные функции.
- •Указатели на массивы. Указатели на строки.
- •Использование указателя на символьную строку
- •Условный оператор. Оператор switch.
- •Формальные и фактические параметры. Массивы в качестве параметров. Аргумент типа void.
- •Способ передачи параметров в подпрограмму
- •110.Циклы for. Циклы while. Циклы do-while. Разница между циклами.
- •Цикл while ("пока") с постусловием
73.Приведите пример использования массива структур.
Пример программы распределения списка людей по весу.
#pragma hdrstop
#include <conio.h>
#include <iostream.h>
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
struct strc{
char kod[50];
char fio[50];
double ves;
};
int n,i,maxi,max;
strc *mcl;
cout<<"vvedite kol-vo ludey"<<endl;
cin>>n;
mcl=new strc[n];
for(i=0;i<n;i++)
{
cout<<"------------------------------------------------------------------------"<<endl;
cout<<"kod:"<<endl;
cin>>mcl[i].kod;
cout<<"fio"<<endl;
cin>>mcl[i].fio;
cout<<"ves"<<endl;
cin>>mcl[i].ves;
cout << mcl[i].kod <<" "<< mcl[i].fio <<" "<< mcl[i].ves<<endl << endl;
}
max=-1;
for(i=0;i<n;i++)
{
if (mcl[i].ves>max) {max=mcl[i].ves; maxi=i;}
}
cout<<"========================================================================="<<endl;
cout<<"rezultat"<<endl;
cout<<"bolwe vseh vesit-: "<<endl;
cout<<mcl[maxi].kod<<" "<<mcl[maxi].fio<<" "<<mcl[maxi].ves<<endl;
getch();
return 0;
}
//---------------------------------------------------------------------------
74.Приведите пример использования оператора switch.
75.Приведите пример использования операторов break и continue.
76.Приведите пример использования операторов new и delete
операторы new и delete позволяют выделять и удалять в программе динамические области памяти.
77,78.Приведите пример использования перегрузки оператора.
matrix operator+(matrix &m1,matrix &m2)
{
int Row=m1.GetRow();
int Col=m1.GetCol();
matrix temp(m1);
for(i=0;i<Row;i++){
for(j=0;j<Col;j++){
temp.Value[i][j]=m1.Value[i][j]+m2.Value[i][j];
}
}
return(temp);
}
matrix operator-(matrix &m1,matrix &m2)
{
int Row=m1.GetRow();
int Col=m1.GetCol();
matrix temp(m1);
for(i=0;i<Row;i++){
for(j=0;j<Col;j++){
temp.Value[i][j]=m1.Value[i][j]-m2.Value[i][j];
}
}
return(temp);
}
matrix operator*(matrix &m1,matrix &m2)
{
int Row=m1.GetRow();
int Col=m1.GetCol();
matrix temp(m1);
for(i=0;i<Row;i++){
for(j=0;j<Col;j++){
temp.Value[i][j]=0;
for(int k=0;k<Row;k++){
temp.Value[i][j]=temp.Value[i][j]+m1.Value[i][k]*m2.Value[k][j];
}
}
}
return(temp);
Приведите пример использования перегрузки функций.
Пример перегрузки функции суммирования sum()
#include <iostream.h>
// определение функции сложения двух значений типа int.
int sum(int a,int b) { return(a + b); }
// определение функции суммирования трёх целых чисел
int sum(int a, int b, int c) { return(a + b + c);}
// определение функции сложения двух действительных чисел
double sum(double a, double b) { return(a + b); }
void main(void)
{ cout << "200 + 801 = " << sum(200, 801) << endl;
cout << "100 + 201 + 700 = " <<sum(100, 201, 700) << endl;
double d1=1.1; double d2=2.1;
cout << "Сумма чисел равна " << sum(d1,d2) << endl;
}
80. Приведите пример использования производных классов
Для начала рассмотрим пример объявления нескольких классов. В этом примере задаются отношения наследования между тремя классами (классы A, B, C). При этом C наследует свойства класса B, который, в свою очередь, является наследником класса A. В этом примере все члены классов объявляются со спецификатором public, к которому мы пока относимся (пока!) как к должному. В этих классах мы объявим (просто обозначим) самые простые варианты конструкторов и деструкторов. В настоящий момент нам важно исключительно их существование.
#include <iostream.h>
class A {public:
A(){}; ~A(){};
int x0; int f0 () {return 1;}; };
class B : public A { public: B(){}; ~B(){};
int x1; int x2; int xx;
int f1 () {return 100;}; int f2 () {return 200;}; };
class C : public B {
public:C(){}; ~C(){};
int x1; int x2; int x3;
int f1 () {return 1000;}; int f3 () {return 3000;};};
void main () {C MyObject;}
Перед нами пример простого наследования. Каждый производный класс при объявлении наследует свойства лишь одного базового класса. В качестве базового класса можно использовать лишь полностью объявленные классы. Неполного предварительного объявления здесь недостаточно. Для наглядного представления структуры производных классов используются так называемые направленные ациклические графы. Узлы этого графа представляют классы, дуги - отношение наследования.
Вот как выглядит направленный ациклический граф ранее приведённого в качестве примера производного класса C:
A
B
C
Структуру производного класса можно также представить в виде таблицы (или схемы класса), отображающей общее устройство класса:
A
B
C
В C++ различаются непосредственные и косвенные базовые классы. Непосредственный базовый класс упоминается в списке баз производного класса. Косвенным базовым классом для производного класса считается класс, который является базовым классом для одного из классов, упомянутых в списке баз данного производного класса.
В нашем примере для класса C непосредственным базовым классом является B, косвенным - A. Следует иметь в виду, что порядок "сцепления" классов, образующих производный класс, зависит от реализации, а потому все схемы классов и объектов имеют характер имеют чисто иллюстративный характер.
Дополним нашу схему, включив в неё объявления всех членов классов, включая, конструкторы и деструкторы.
В результате мы получаем полную схему производного класса со всеми его компонентами, вместе с его непосредственными базовыми классами, а также и косвенными базовыми классами.
A
A();
~A();
int x0;
int f0 ();
B
B();
~B();
int x1;
int x2;
int xx;
int f1();
int f2();
C
C();
~C();
int x1;
int x2;
int xx;
int f1();
int f2();
Это схема класса, а не объекта. Образно говоря, наша схема подобна схеме многоэтажного бункера, разделённого на три уровня. На схеме эти уровни разделяются двойными линиями. Класс C занимает самый нижний уровень. Именно этот класс имеет неограниченные (по крайней мере, в нашей версии объявления производного класса) возможности и полномочия доступа к элементам базовых классов. Именно с нижнего уровня можно изменять все (опять же, в нашей версии объявления класса) значения данных-членов класса и вызывать все (или почти все) функции-члены класса.