Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
#1

Размещение реализаций методов класса - C++

07.11.2012, 14:54. Просмотров 657. Ответов 6
Метки нет (Все метки)

Цитирую книгу:

"Рекомендуется помещать объявление класса в файл с расширением .h, а реализацию его функций-членов - в файл с расширением .cpp."

Пример из этой же книги:

Файл Cat.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#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;
}
Здесь автор объявляет класс в заголовочном файле, а реализацию методов помещает в основной файл программы. Правда из методов в файле .cpp оказываются только конструктор и деструктор. Но это только потому, что функции-члены GetAge(), SetAge() и Meow() сделаны встраиваемыми, т.е. реализация расположена в самом объявлении класса. В других примерах из этой же книги функции-члены, не являющиеся встроенными, также помещены авторами в основной файл .cpp.

Об этом я и хотел спросить. В книге пишут, что типа это очень удобно и все хорошие программисты так делают. А я думал-думал несколько дней, разные примеры смотрел/разбирал, но так и не понял в чём тут удобство. Мне, например, наоборот кажется, что так неудобно. Я у себя на компе этот пример переделал следующим образом:
Файл Cat.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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
Cat::Cat (int initialAge)
{
    itsAge = initialAge;
}
 
Cat::~Cat()
{
}
Файл Cat.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include "Cat.h"
 
// Создать кота, установить его возраст, мяукнуть,
// сообщить его возраст, затем мяукнуть снова
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;
}
И остальные примеры из этой же книги я делаю аналогично: в заголовочный файл помещаю объявление класса, ниже под ним располагаю реализацию всех функций-членов. А в основном файле программы, внутри main() просто создаю объекты и делаю с ними всё, что надо. Мне вот, чайнику, так кажется удобнее гораздо. Объясните кто понимает, почему я не прав.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2012, 14:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Размещение реализаций методов класса (C++):

Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе работу этих методов - C++
Реализация методов класса. Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе...

Утилизация класса (размещение класса в другом файле) - C++
Здравствуйте уважаемые пользователи данного форума,прошу Вас помочь в решение данной проблемы.Пожалуйста подскажите как утилизировать...

Как вынести описание методов вложенного класса за пределы класса? - C++
Подскажите, пожалуйста, как мне вынести описание методов вложенного класса за пределы класса?

Вызов методов класса из двойного указателя на экземпляр класса - C++
Добрый день! Как можно вызвать метод класса по двойному указателя на его экземпляр? struct Point { void getPoint(){}; ...

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов - C++
Возникли сложности при решении задачи. Буду признателен тем, кто поможет. Задание: Составить описание класса. Объявить объекты класса...

Размещение класса в динамической памяти - C++
Добрый день! Интересует такой вопрос, который я никак не пойму: Есть класс class Container, который создается в динамической памяти. c...

6
Croessmah
Эксперт CЭксперт С++
13412 / 7563 / 855
Регистрация: 27.09.2012
Сообщений: 18,614
Записей в блоге: 3
Завершенные тесты: 1
07.11.2012, 15:13 #2
почитайте статьи на тему раздельной компиляции
0
SEvg
85 / 85 / 1
Регистрация: 16.10.2012
Сообщений: 305
07.11.2012, 15:37 #3
Для маленьких и простых проектов - удобства нет. Но чем сложнее и больше проект, тем удобнее...
Если в один файл запихнуть, триста тысяч строк кода - удобно будет? А компилировать такой файл, при каждом изменении?

Если есть желание расти, то советую привыкать.
0
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
07.11.2012, 17:53  [ТС] #4
Цитата Сообщение от SEvg Посмотреть сообщение
Если в один файл запихнуть, триста тысяч строк кода - удобно будет?
Так у меня просто и складывается впечатление, что если реализацию всех методов всех классов (в большом проекте) запихать в файл .cpp, то он как раз и станет длиной в триста тыс. строк.
0
Croessmah
Эксперт CЭксперт С++
13412 / 7563 / 855
Регистрация: 27.09.2012
Сообщений: 18,614
Записей в блоге: 3
Завершенные тесты: 1
07.11.2012, 18:21 #5
А зачем все методы всех классов в один фаил? Один класс - один cpp и один h фаил
1
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
07.11.2012, 18:25  [ТС] #6
Цитата Сообщение от Croessmah Посмотреть сообщение
А зачем все методы всех классов в один фаил? Один класс - один cpp и один h фаил
А, так вот. Хорошо. Так может тогда это будут отдельные .cpp файлы, а не тот, где функция main расположена? Так?
0
Croessmah
Эксперт CЭксперт С++
13412 / 7563 / 855
Регистрация: 27.09.2012
Сообщений: 18,614
Записей в блоге: 3
Завершенные тесты: 1
07.11.2012, 19:04 #7
Да. Объявление класса в h файле, а реализация в cpp
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2012, 19:04
Привет! Вот еще темы с ответами:

Шаблоны методов класса - C++
Здравствуйте, подскажите, можно ли в С++ сделать шаблон отдельного метода класса ? т.е. нужно что-то типа подобного: class MyClass ...

Вызов методов класса - C++
Здравствуйте! При компиляции программы(в среде CodeBloks) выдается такая ошибка: request for member 'Arrayss:: array_proc' in 'j', which...

Ошибка методов класса - C++
#include &quot;Header.h&quot; #include &lt;iostream&gt; int main() { using ms::List; List&lt;int&gt; mylist; // 1 int val = 7.1; ...

Вызов методов класса - C++
// practice.cpp : main project file. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; const int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
07.11.2012, 19:04
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru