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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Построить матрицу В такого же размера, как А, элементы которой обладают заданным свойством http://www.cyberforum.ru/cpp-beginners/thread691152.html
Ребят помогите очень нужно пожалуйста !!! задачи по С++ 4 Построить матрицу В такого же размера, как А, элементы которой обладают следующим свойством: элемент В равен минимальному из элементов...
C++ создать связаный список, в котором содержатся символы. паследавательность символов "ар" сменить на "га" создать связаный список, в котором содержатся символы. паследавательность символов "ар" сменить на "га". Вот что у меня получилось, помогите дописать: #include<iostream.h> #include<conio.h>... http://www.cyberforum.ru/cpp-beginners/thread690985.html
Напечатать треугольник Паскаля — таблицу биномиальных коэффициентов по формуле C++
Дано целое неотрицательное число K. Напечатать треугольник Паскаля - таблицу биномиальных коэффициентов по формуле для всех возмозжных n и k, при условии что (0<=k<=n<=K).
C++ нажатие клавишы
есть игра в ней стоит некая защита которая не даёт программе, как не странно программным способом(имитацией) нажать клавишу. код: #include <Windows.h> #include <iostream> int main() {...
C++ В зависимости от введенного числа изменить окончание у слова http://www.cyberforum.ru/cpp-beginners/thread690975.html
Программировать начал только 2 недели назад, поэтому опыта очень мало. Может кто поможет. Нужно написать программу, которая в зависимости от введенного числа меняет окончание у слова. Собрано 2...
C++ Стек записи на основе статического массива типа запись Добрый вечер! Помогите пожалуйста выполнить задание: Создать стек записи Спортсмен на основе статического массива типа запись. Заранее, очень вам благодарен! Добавлено через 34 минуты... подробнее

Показать сообщение отдельно
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136

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

07.11.2012, 14:54. Просмотров 644. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru