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

Объявление классов - C++

Восстановить пароль Регистрация
 
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
31.07.2013, 16:41     Объявление классов #1
Только начинаю изучать С++, смотрю видеоуроки.
Там показано такое объявление классов (среда разработки Microsoft Visual C++ 2010)

Создается заголовочный файл Person.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <string>
using namespace std;
 
class Person 
{
private:
    string firstname;
    string lastname;
    int arbitrarynumber;
 
public:
    Person(string first, 
        string last,
        int arbitrary);
    ~Person();
};
Создается файл класса Person.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
 
#include "Person.h"
#include <iostream>
 
Person::Person(string first, string last, int arbitrary) : firstname(first), lastname(last), arbitrarynumber (arbitrary)
{
    cout << "constructing " << 
        firstname << " " << lastname << endl;
}
 
Person::~Person()
{
    cout << "destructing " << 
        firstname << " " << lastname << endl ;
}
и вот сама программа
C++
1
2
3
4
5
6
7
8
9
10
11
#include "stdafx.h"
#include "Person.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
    Person p1 ("Kate", "Gregory", 20);
    {
        Person p2 ("Masha", "Fomina", 87);
    }
    return 0;
}
После С# такой способ объявления класса кажется очень странным. Объявление класса в С++ действительно разносится по разным файлам? Что это дает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2013, 16:41     Объявление классов
Посмотрите здесь:

объявление функции C++
объявление в структуре C++
C++ Объявление взаимодействующих классов
Объявление переменных в С++ C++
Объявление переменных C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Valentina
66 / 66 / 3
Регистрация: 13.05.2012
Сообщений: 130
31.07.2013, 16:50     Объявление классов #2
да нет можна все вместе одной программой
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
31
32
33
34
35
36
37
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
 
class Person 
{
private:
    string firstname;
    string lastname;
    int arbitrarynumber;
 
public:
    Person(string first, 
        string last,
        int arbitrary);
    ~Person();
};
Person::Person(string first, string last, int arbitrary) : firstname(first), lastname(last), arbitrarynumber (arbitrary)
{
    cout << "constructing " << 
        firstname << " " << lastname << endl;
}
 
Person::~Person()
{
    cout << "destructing " << 
        firstname << " " << lastname << endl ;
}
int _tmain(int argc, _TCHAR* argv[])
{
    Person p1 ("Kate", "Gregory", 20);
    {
        Person p2 ("Masha", "Fomina", 87);
    }
    return 0;
}
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
31.07.2013, 16:52  [ТС]     Объявление классов #3
Valentina, то, что можно и всё вместе, я понимаю.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.07.2013, 17:02     Объявление классов #4
Цитата Сообщение от Heidel Посмотреть сообщение
Что это дает?
можно спрятать реализацию методов, предоставив "клиентам" лиш хедер файл и бинарник dll/lib/a/...
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
31.07.2013, 17:06  [ТС]     Объявление классов #5
Jupiter, в хедере, как я понимаю, мы объявляем класс и в нем объявляем переменные класса и методы, а описания методов относим в файл .cpp?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
31.07.2013, 17:07     Объявление классов #6
Heidel, главный замес тут в том, как происходит сборка программы на C++.
В общем случае программа состоит из нескольких .cpp файлов, каждый из которых компилируется по отдельности. На выходе получаются объектные файлы (.o), которые затем уже линкуются вместе. Таким образом, каждый объектный файл содержит реализацию. Но для того, чтобы можно было использовать функции, определенные в некотором файле, необходимо их объявление. Оно и размещается в .h файлах, которые являются своего рода связующими звеньями.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.07.2013, 17:09     Объявление классов #7
Цитата Сообщение от Heidel Посмотреть сообщение
в хедере, как я понимаю, мы объявляем класс и в нем объявляем переменные класса и методы, а описания методов относим в файл .cpp?
да.
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
31.07.2013, 17:13  [ТС]     Объявление классов #8
0x10, и если нужно использовать классы, объявленные в отдельных файлах в программе, то они используются через
C#
1
#include "Person.h"
?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
31.07.2013, 17:14     Объявление классов #9
Heidel, если нужно именно использовать методы, создавать объекты - да.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2013, 17:16     Объявление классов
Еще ссылки по теме:

C++ Объявление и определение классов
C++ объявление перпеменных
C++ Предварительное объявление классов. Вызвать функцию до реализации класса

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

Или воспользуйтесь поиском по форуму:
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
31.07.2013, 17:16  [ТС]     Объявление классов #10
0x10, угу, понятно, спасибо, интересно.
Yandex
Объявления
31.07.2013, 17:16     Объявление классов
Ответ Создать тему
Опции темы

Текущее время: 02:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru