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

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

Войти
Регистрация
Восстановить пароль
 
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
#1

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

31.07.2013, 16:41. Просмотров 499. Ответов 9
Метки нет (Все метки)

Только начинаю изучать С++, смотрю видеоуроки.
Там показано такое объявление классов (среда разработки 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;
}
После С# такой способ объявления класса кажется очень странным. Объявление класса в С++ действительно разносится по разным файлам? Что это дает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2013, 16:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объявление классов (C++):

Объявление и определение классов - C++
Всем здрасти! Имеем простецкий код: class Node; class HeadNode; class TailNode; class Node { public: Node() {}

Объявление взаимодействующих классов - C++
Здравствуйте. Возникла проблема с объявлением классов. Вот код (суть описана в комментариях): #include &lt;iostream&gt; using namespace...

Объявление статических констант шаблонных классов - C++
Что-то я туплю - дан шаблонный класс, принимающий в качестве аргументов шаблона типы Type1 и Type2. В классе есть статическая константа...

Работа с классами. Объявление классов наследования - C++ - C++
На языке С++ разработать класс, описывающий точку на плоскости. Реализовать методы ввода и изменения параметров точки, методы ...

Предварительное объявление классов. Вызвать функцию до реализации класса - C++
Приветствую, народ. Пытаюсь реализовать структуру типа патерна &quot;Посредник&quot;. И при реализации взаимодействий возникла проблемка. ...

Разработать иерархию классов, демонстрирующее работу с коллекцией объектов разных классов - C++
Задание: Разработать в соответствии с индивидуальным заданием иерархию классов и приложение, демонстрирующее работу с коллекцией объектов...

9
Valentina
68 / 68 / 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;
}
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
31.07.2013, 16:52  [ТС] #3
Valentina, то, что можно и всё вместе, я понимаю.
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.07.2013, 17:02 #4
Цитата Сообщение от Heidel Посмотреть сообщение
Что это дает?
можно спрятать реализацию методов, предоставив "клиентам" лиш хедер файл и бинарник dll/lib/a/...
1
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
31.07.2013, 17:06  [ТС] #5
Jupiter, в хедере, как я понимаю, мы объявляем класс и в нем объявляем переменные класса и методы, а описания методов относим в файл .cpp?
0
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,099
31.07.2013, 17:07 #6
Heidel, главный замес тут в том, как происходит сборка программы на C++.
В общем случае программа состоит из нескольких .cpp файлов, каждый из которых компилируется по отдельности. На выходе получаются объектные файлы (.o), которые затем уже линкуются вместе. Таким образом, каждый объектный файл содержит реализацию. Но для того, чтобы можно было использовать функции, определенные в некотором файле, необходимо их объявление. Оно и размещается в .h файлах, которые являются своего рода связующими звеньями.
1
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.07.2013, 17:09 #7
Цитата Сообщение от Heidel Посмотреть сообщение
в хедере, как я понимаю, мы объявляем класс и в нем объявляем переменные класса и методы, а описания методов относим в файл .cpp?
да.
2
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
31.07.2013, 17:13  [ТС] #8
0x10, и если нужно использовать классы, объявленные в отдельных файлах в программе, то они используются через
C#
1
#include "Person.h"
?
0
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,099
31.07.2013, 17:14 #9
Heidel, если нужно именно использовать методы, создавать объекты - да.
1
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
31.07.2013, 17:16  [ТС] #10
0x10, угу, понятно, спасибо, интересно.
0
31.07.2013, 17:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2013, 17:16
Привет! Вот еще темы с ответами:

Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов) - C++
Тема: Множественное наследование. Явная реализация методов базовых абстрактных классов. Как вынести методы из классов Panel и...

Реализация отношения классов типа двунаправленная ассоциация, UML, порядок объявления классов, неполный класс - C++
Доброго времени суток! Осваивая UML, решил реализовать отношение двунаправленной ассоциации по диаграмме: У одного владельца...

Преобразования объектов классов в объекты других классов - C++
Задача типа обмен валют. Нужно конвертировать старый фунт стерлинг(фунт, шиллинг и пенсы) в доллары и обратно, по курсу 1 фунт = 50...

Наследование классов. Копирование производных классов - C++
Здравствуйте всем, у меня такой вопрос: написал код #include &quot;stdafx.h&quot; class A //Создаем класс А { int mA; ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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