
- •Методическое материалы по курсу
- •Cанкт-Петербург
- •Оглавление
- •Введение.
- •Задание: Разобраться в коде и вывести на консоль еще одну фразу: "It's a first program"
- •Типы данных и правила их применения:
- •Операции
- •Управляющие операторы
- •Задание: в данном примере реализуйте операции умножения и деления Оператор цикла for (;;)
- •Оператор цикла do-while
- •Задание: к примеру добавьте перегруженную функцию для суммирования чисел типа double, и проверьте ее работу
- •Модульная организация программы
- •Массивы
- •Задание: добавьте еще один элемент в массив при инициализации и посмотрите его размерность. В цикле увеличьте значение всех элементов массива на 10 и напечатайте его заново. Работа со строками
- •Ссылочный тип данных
- •Задание: Объявить еще одну переменную-ссылку на I и, изменив ее значение, пронаблюдать, как изменилось значение переменной I Работа с файлами
- •Взаимодействие с ассемблером
- •Обработка ошибок и исключений
- •Директивы препроцессора: Макросы и Условные директивы
- •Структуры
- •Задание : Добавить в сруктуру еще одно данное (стоимость модели) типа int, в коде функции main() задать значение этого данного переменной–структуры, и напечатать его.
- •Объектно-ориентированное программирование (ооп)
- •Терминология ооп
- •Структура как простейший класс
- •Конструкторы и деструкторы
- •Перегрузка методов класса
- •Дружественные функции и классы
- •Указатель this
- •Перегрузка операций
- •Множественное наследование
- •Если осталось время – разобраться в иерархии классов и принципов построения
- •Список литературы
Множественное наследование
Класс может быть производным более, чем от одного базового класса, конструкторы вызываются в том порядке, в котором классы перечислены после двоеточия, например
class CollectionOfBook : public Book, public Collection {
// Дополнительные данные
};
Если класс наследуется не виртуальным способом, то все данные хранятся вместе, в частности переменная а класса С хранится в двух экземплярах, обращение к нужному идентификатору - через оператор разрешения видимости :: (\33MULTII)
class A { // Первый базовый класс
public:
int a; // Данное
int b() { return(a); } // и две функции
char c() { return('C'); }
};
class B { //Второй базовый класс
public:
int a; // Данное с тем же именем, что у класса A
int b() { return(c);} // Функция с тем же именем, что у класса A
char c; // Данное с тем же именем, что функция класса A
};
class C : public A, public B { // Базовый класс С производный от классов A и B
};
int main()
{
C *pc = new C; // Динамическое создание переменной класса C
// cout << pc->a << endl; // Неверный доступ к данному a
cout << "\n A::a : " << pc->A::a; // Доступ к данному через уточнение видимости
cout << "\n B::a : " << pc->B::a;
pc->A::a = 123456; // Изменение данного a базового класса A
cout << "\n A::a : " << pc->A::a;
cout << "\n B::a : " << pc->B::a;
// cout << pc->b() << endl; // Неверный доступ к функции
cout << pc->A::b() << endl; // Тоже нужна операция уточнения видимости
// cout << "\n C() : " << pc->c(); // Неверный доступ к функции класса A
// cout << "\n C : " << pc->c; // Неверный доступ к данному класса B
cout << "\n A::C() : " << pc->A::c(); // Опять же через уточнение видимости
cout << "\n B::C : " << pc->B::c;
return(0);
}
При виртуальном множественном наследовании в производном классе хранится только одна копия данных базового класса, и доминирует та переменная или метод, класс которого первым объявлен (\34VIRTMI)
class A { // Базовый класс
public:
int a;
};
class B : public virtual A { // Виртуальное наследование
};
class C : public virtual A { // Виртуальное наследование
};
class D : public C, public B { // Класс хранит только одну копию a
};
int main()
{
D d; // Создание объекта класса D
cout << d.B::a << endl; // Текущее содержание данного
cout << d.C::a << endl;
d.a = 1; // Изменение данного
cout << d.B::a << endl; // Данное храниться в одном экземпляре
cout << d.C::a << endl; // Поэтому уточнение видимости не обязательно
return(0);
}
Дополнительно: Объектно-ориентированный список в С++ (\35NNR)
Пример показывает использование инкапсуляции, наследования, полиморфизма (виртуальные функции), дружественных классов, принципы работы с разнородными объектами и построение связанных списков.