19.05.2014, 20:23. Просмотров 349. Ответов 2
привет. читаю книжку по С++. автор Либерти. в ней куча опечаток повсюду. наткнулся на очередную непонятку. то ли я не врубаюсь, то ли у них очередной ляп.
предлагается размещать объявление класса в отдельном заголовочном файле .h, а реализацию методов этого класса в основном файле проекта .cpp. Такой пример:
содержимое файла Cat.h :
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| // Объявление класса Cat в файле Cat.h
#include <iostream>
class Cat
{
public:
Cat(int);
~Cat();
int GetAge() const { return itsAge; } // встроенная функция
void SetAge(int age) { itsAge = age; } // встроенная функция
void Meow() const { std::cout << "Meow.\n"; } // встроенная функция
private:
int itsAge;
}; |
|
Содержимое файла Cat.cpp :
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| #include "Cat.h"
// Конструктор класса Cat
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 response;
std::cin >> response;
return 0;
} |
|
здесь реализации конструктора и деструктора помещены не сразу же после объявления класса (в файле Cat.h), а в главном файле проекта. Что касается методов доступа, то в этом примере автор их сделал встроенными. А если они не встроены, то он также предлагает помещать их реализации в файл .cpp после реализации конструктора и деструктора.
а в чём тут удобство? я бы и объявление класса и реализацию всех его методов запихал в заголовочный файл .h.
Погуглил, но не смог найти объяснение этому явлению.