Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции АиП.doc
Скачиваний:
93
Добавлен:
15.11.2018
Размер:
668.67 Кб
Скачать
    1. Файлы заголовков

Объявления классов можно поместить в один файл с программой, но это не считается хорошим тоном. В соглашении, которого придерживаются многие программисты, принято помещать объявления в файл заголовка (header file), имя которого обычно совпадает с именем файла программы и имеет расширение .h, .hp или .hpp.

Например, можно поместить объявление класса Cat в файл cf2.h, а определения методов класса – в файл cf2.cpp. Затем файл заголовка необходимо подключить в файл кода с расширением .cpp. Для этого в файле cf2.cpp перед началом программного кода используется уже известная директива:

#include “cf2.h”

Это заставит компилятор внести содержимое файла cf2.h в соответствующее место программы.

Зачем отделять файл заголовка от файла основной программы, если впоследствии их все равно придется собрать в одну программу? Как показывает практика, клиентов класса обычно не очень волнуют подробности его реализации. Небольшой файл заголовка содержит всю необходимую для них информацию, а файл с подробностями реализации класса можно до определенного момента игнорировать. Кроме того, не исключено, что содержимое файла заголовка удастся применить не в одном, а в нескольких файлах с расширением .cpp.

    1. Встраиваемые функции

Если функция объявлена с ключевым словом 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. Классы, содержащие другие классы как данные-члены