
- •Конспект лекций по дисциплине «алгоритмизация и программирование»
- •Лекция № 1. Основные понятия
- •Использование ключевого слова using
- •2: Int main()
- •4: Using std::cout; // Вместо этих двух строк можно записать
- •5: Using std::endl; /* одну: using namespace std;*/
- •20: Return 0;
- •Комментарии
- •Функции
- •Переменные
- •Лекция № 3. Операторы
- •Математические операторы
- •Математические функции
- •Логические операторы
- •Операторы отношения
- •Операторы переходов по условию
- •Лекция № 4. Циклы
- •Оператор goto
- •Оператор цикла while
- •Операторы break и continue
- •Оператор цикла do..While
- •Оператор цикла for
- •Int main ()
- •Лекция № 5. Массивы
- •Одномерные массивы
- •Int main()
- •Многомерные массивы
- •Массивы символов (строки)
- •Int main()
- •Лекция № 6. Некоторые простые алгоритмы
- •Поиск максимального (или минимального) числа из выборки чисел
- •Int main()
- •Пузырьковая сортировка (bubble sort)
- •Void exch(double &a, double &b)
- •Лекция № 7. Численное решение уравнений
- •Теоретические основы
- •Метод простого перебора
- •Int RootSearch (double p[], int n, double a, double b, double dx);
- •Int main ()
- •Int RootSearch (double p[], int n, double a, double b, double dx)
- •Метод половинного деления
- •Метод Ньютона-Рафсона
- •Лекция № 8. Основы объектно-ориентированного программирования
- •Введение
- •Void Meow();
- •Закрытые и открытые члены класса
- •Void Meow();
- •Int main()
- •Void Meow();
- •Лекция № 9. Конструкторы и деструкторы
- •Определение
- •Int Weight;
- •Файлы заголовков
- •Встраиваемые функции
- •Лекция № 10. Классы, содержащие другие классы как данные-члены
- •Сложные классы
- •Структуры
-
Файлы заголовков
Объявления классов можно поместить в один файл с программой, но это не считается хорошим тоном. В соглашении, которого придерживаются многие программисты, принято помещать объявления в файл заголовка (header file), имя которого обычно совпадает с именем файла программы и имеет расширение .h, .hp или .hpp.
Например, можно поместить объявление класса Cat в файл cf2.h, а определения методов класса – в файл cf2.cpp. Затем файл заголовка необходимо подключить в файл кода с расширением .cpp. Для этого в файле cf2.cpp перед началом программного кода используется уже известная директива:
#include “cf2.h”
Это заставит компилятор внести содержимое файла cf2.h в соответствующее место программы.
Зачем отделять файл заголовка от файла основной программы, если впоследствии их все равно придется собрать в одну программу? Как показывает практика, клиентов класса обычно не очень волнуют подробности его реализации. Небольшой файл заголовка содержит всю необходимую для них информацию, а файл с подробностями реализации класса можно до определенного момента игнорировать. Кроме того, не исключено, что содержимое файла заголовка удастся применить не в одном, а в нескольких файлах с расширением .cpp.
-
Встраиваемые функции
Если функция объявлена с ключевым словом inline (т.е. встраиваемая), компилятор не создает функцию в памяти компьютера, а копирует ее строки непосредственно в код программы по месту вызова. Встраиваемая реализация функции GetWeight(), например, выглядит так:
inline int Cat::GetWeight() { return itsWeight; }
Можно также поместить реализацию функции в объявление класса, что сделает такую функцию встраиваемой автоматически. Например:
class Cat
{
public:
int GetWeight() {return itsWeight;} //встраиваемая
void SetWeight(int aWeight);
};
В листингах 9.2 и 9.3 вновь создается класс Cat, но теперь объявление класса содержится в файле cf2.h, а реализация – в файле cf2.cpp. Кроме того, в листинге 9.3 методы доступа к данным класса и метод Meow() являются встраиваемыми.
Листинг 9.2. Объявление класса Cat в файле cf2.h
#include <iostream>
class Cat
{
public:
Cat(int initialAge);
~Cat();
int GetAge() const { return itsAge; }
void SetAge(int age) { itsAge=age; }
void Meow() const { std::cout<<"Meow.\n"; }
private:
int itsAge;
};
Листинг 9.3. Реализация класса Cat в файле cf2.cpp
#include "cf2.h"
Cat::Cat(int initialAge) //Конструктор
{
itsAge=initialAge;
}
Cat::~Cat() { } //Деструктор
int main()
{
Cat Frisky(5);
Frisky.Meow();
std::cout<<"Frisky is a cat who is ";
std::cout<<Frisky.GetAge()<<" years old.\n";
Frisky.Meow();
Frisky.SetAge(7);
std::cout<<"Now Frisky is ";
std::cout<<Frisky.GetAge()<<" years old.\n";
char Res;
std::cin>>Res;
return 0;
}
Лекция № 10. Классы, содержащие другие классы как данные-члены