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

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

Войти
Регистрация
Восстановить пароль
 
iga7013
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 38
#1

Подключение к main.cpp заголовочных файлов с классами - C++

21.01.2014, 21:39. Просмотров 543. Ответов 5
Метки нет (Все метки)

Есть следующий код:
Кликните здесь для просмотра всего текста
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <string>
#include <fstream>
#include <conio.h>
#include "student.h"
using namespace std;
 
class Student
{
    public:
        string name;
        int year;
        string address;
        string telephone;
        string faculty;
        int course;
};
 
const int N = 20;
 
void getStudentsFaculty( Student *a, int n, string fac )
{
    for( int index = 0; index < n; ++index )
        if ( a[ index ].faculty == fac )
            cout << a[ index ].name << endl;
}
 
void getListStudents( Student *a, int n )
{
for( int i = 0; i < n - 1; ++i )
for( int j = i + 1; j < n; ++j )
if ( a[ i ].faculty > a[ j ].faculty )
{
Student temp = a[ i ];
a[ i ] = a[ j ];
a[ j ] = temp;
}
for( int i = 0; i < n; ++i )
{
if ( i == 0 || ( i > 0 && a[ i ].faculty != a[ i - 1 ].faculty ) )
cout << a[ i ].faculty << " : " << endl;
cout << "\t" << a[ i ].name << endl;
}
cout << "\n=======================================\n" << endl;
 
for( int i = 0; i < n - 1; ++i )
for( int j = i + 1; j < n; ++j )
if ( a[ i ].course > a[ j ].course )
{
Student temp = a[ i ];
a[ i ] = a[ j ];
a[ j ] = temp;
}
for( int i = 0; i < n; ++i )
{
if ( i == 0 || ( i > 0 && a[ i ].course != a[ i - 1 ].course ) )
cout << a[ i ].course << " : " << endl;
cout << "\t" << a[ i ].name << endl;
}
}
 
void getStudentsAfterYear( Student *a, int n, int y)
{
    int count = 0;
    for( int index = 0; index < n; ++index )
        if ( a[ index ].year > y )
        {
            ++count;
            cout << a[ index ].name << endl;
        }       
        if ( !count )
        cout << "Are absent!" << endl;
}
 
int main()
{
    Student arr[ N ];
 
    int size;
    cout << "Size : ";
    cin >> size;
 
    for( int i = 0; i < size; ++i )
    {
        cout << "Name: ";
        cin >> arr[ i ].name;
        cout << "Year: ";
        cin >> arr[ i ].year;
        cout << "Address: ";
        cin >> arr[ i ].address;
        cout << "Telephone: ";
        cin >> arr[ i ].telephone;
        cout << "Faculty: ";
        cin >> arr[ i ].faculty;
        cout << "Course: ";
        cin >> arr[ i ].course;
        cout << "==============================" << endl;
    }
 
    string fac;
    cout << "Faculty: ";
    cin >> fac;
 
    getStudentsFaculty( arr, size, fac );
 
    getListStudents( arr, size );
 
    int year;
    cout << "Year: ";
    cin >> year;
    getStudentsAfterYear( arr, size, year );
    _getch();
    return 0;
}


Нужно файл класса вынести в отдельный Studtnt.h и Student.cpp. Никак не могу понять как это сделать. Просто подключить несколько файлов к проекту могу, но если там обычные функции, а класс никак не видит.
Там что-то связано с указателем "this->", но никак не может до меня дойти что да как.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2014, 21:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подключение к main.cpp заголовочных файлов с классами (C++):

Подключение файлов main.cpp some.cpp some.h - C++
Всем привет, программа разделенна на три файла poly.cpp main.cpp poly.h Кто мог бы объяснить как происходит подключение этих файлов, и как...

Подключение заголовочных файлов - C++
Здравствуйте! Подскажите, можно ли сделать так, чтобы при создании нового консольного проекта, наиболее часто используемые файлы (например,...

Подключение заголовочных файлов - C++
Начал изучать С++, скачал несколько книг и заметил что в одних при включении заголовочных файлов (например iostream.h) используется запись:...

Подключение заголовочных файлов - C++
Здравствуйте. Возникают ошибки при компиляции проекта: 1. Указывает на указатель: 2. Указывает на указатель и коллекцию указателей: ...

Подключение заголовочных файлов. - C++
У меня есть заголовочный файл: ...\1\2\file.h. в папке &quot;1&quot; есть file2.h. Как подключить к &quot;file.h&quot; &quot;file2.h&quot;?

Подключение заголовочных файлов - C++
Итересует меня вопрос : нужно ли при компиляции программ оставлять только нужные хэдеры ? т.е. их минимальное кол-во для корректной...

5
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.01.2014, 22:01 #2
В чём сложность непонятно... Вот это и прототипы функций - в .h:
C++
1
2
3
4
5
6
7
8
9
10
class Student
{
    public:
        string name;
        int year;
        string address;
        string telephone;
        string faculty;
        int course;
};
Реализации функций - в .cpp. Подлкючить, в этом .cpp и в main.cpp, .h файл с классом и прототипами функций. Добавить .cpp, с реализациями функций, в проект.
0
iga7013
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 38
21.01.2014, 22:02  [ТС] #3
Цитата Сообщение от alsav22 Посмотреть сообщение
В чём сложность непонятно...
Растолкал я их туда:
student.h:
Кликните здесь для просмотра всего текста
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
#pragma once
#include <string>
class student
{
private:
    std::string name;
    int year;
    std::string address;
    std::string telephone;
    std::string faculty;
    int course;
public:
    student(){};
    ~student(){};
    void set_name(std::string);
    std::string get_name();
    void set_year(int);
    int get_year();
    void set_address(std::string);
    std::string get_address();
    void set_telephone(std::string);
    std::string get_telephone();
    void set_faculty(std::string);
    std::string get_faculty();
    void set_course(int);
    int get_course();
};


student.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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include "student.h"
#include <iostream>
#include <string>
void student::set_name(std::string p_name)
{
    name=p_name;
}
std::string student::get_name()
{
    return name;
}
//----------------------------------------
void student::set_year(int p_year)
{
    year=p_year;
}
int student::get_year()
{
    return year;
}
//----------------------------------------
void student::set_address(std::string p_address)
{
    address=p_address;
}
std::string student::get_address()
{
    return address;
}
//----------------------------------------
void student::set_telephone(std::string p_telephone)
{
    telephone=p_telephone;
}
std::string student::get_telephone()
{
    return telephone;
}
//----------------------------------------
void student::set_faculty(std::string p_faculty)
{
    faculty=p_faculty;
}
std::string student::get_faculty()
{
    return faculty;
}
//----------------------------------------
void student::set_course(int p_course)
{
    course=p_course;
}
int student::get_course()
{
    return course;
}
//----------------------------------------

Но как только комментирую класс в main.cpp оно с ума сходит =\
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.01.2014, 22:13 #4
Вот это класс в первом посте:
C++
1
2
3
4
5
6
7
8
9
10
class Student
{
    public:
        string name;
        int year;
        string address;
        string telephone;
        string faculty;
        int course;
};
Вот это класс в третьем посте:
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
class student
{
private:
    std::string name;
    int year;
    std::string address;
    std::string telephone;
    std::string faculty;
    int course;
public:
    student(){};
    ~student(){};
    void set_name(std::string);
    std::string get_name();
    void set_year(int);
    int get_year();
    void set_address(std::string);
    std::string get_address();
    void set_telephone(std::string);
    std::string get_telephone();
    void set_faculty(std::string);
    std::string get_faculty();
    void set_course(int);
    int get_course();
};
Какое отношение первый класс имеет ко второму?
0
iga7013
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 38
21.01.2014, 22:25  [ТС] #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Какое отношение первый класс имеет ко второму?
Первый пост, это работающая программа, но класс описан внутри main.cpp и его поля со спецификатором доступа "public"
В третьем посте, этот тот же класс, только уже находится в файле student.h и с в ручную прописанным конструктором и функциями доступа к закрытым полям (private...)


сейчас все выглядит вот так:

source.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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <iostream>
#include <string>
#include <fstream>
#include <conio.h>
#include "student.h"
using namespace std;
void getStudentsFaculty (student ,int, string);
void getListStudents (student,int);
void getStudentsAfterYear( student , int , int );
const int N = 20;
 
void getStudentsFaculty( student *a, int n, string fac )
{
    for( int index = 0; index < n; ++index )
        if ( a[ index ].faculty == fac )
            cout << a[ index ].name << endl;
}
 
void getListStudents( student *a, int n )
{
for( int i = 0; i < n - 1; ++i )
for( int j = i + 1; j < n; ++j )
if ( a[ i ].faculty > a[ j ].faculty )
{
Student temp = a[ i ];
a[ i ] = a[ j ];
a[ j ] = temp;
}
for( int i = 0; i < n; ++i )
{
if ( i == 0 || ( i > 0 && a[ i ].faculty != a[ i - 1 ].faculty ) )
cout << a[ i ].faculty << " : " << endl;
cout << "\t" << a[ i ].name << endl;
}
cout << "\n=======================================\n" << endl;
 
for( int i = 0; i < n - 1; ++i )
for( int j = i + 1; j < n; ++j )
if ( a[ i ].course > a[ j ].course )
{
Student temp = a[ i ];
a[ i ] = a[ j ];
a[ j ] = temp;
}
for( int i = 0; i < n; ++i )
{
if ( i == 0 || ( i > 0 && a[ i ].course != a[ i - 1 ].course ) )
cout << a[ i ].course << " : " << endl;
cout << "\t" << a[ i ].name << endl;
}
}
 
void getStudentsAfterYear( student *a, int n, int y)
{
    int count = 0;
    for( int index = 0; index < n; ++index )
        if ( a[ index ].year > y )
        {
            ++count;
            cout << a[ index ].name << endl;
        }       
        if ( !count )
        cout << "Are absent!" << endl;
}
 
int main()
{
    student arr[ N ];
 
    int size;
    cout << "Size : ";
    cin >> size;
 
    for( int i = 0; i < size; ++i )
    {
        cout << "Name: ";
        cin >> arr[ i ].name;
        cout << "Year: ";
        cin >> arr[ i ].year;
        cout << "Address: ";
        cin >> arr[ i ].address;
        cout << "Telephone: ";
        cin >> arr[ i ].telephone;
        cout << "Faculty: ";
        cin >> arr[ i ].faculty;
        cout << "Course: ";
        cin >> arr[ i ].course;
        cout << "==============================" << endl;
    }
 
    string fac;
    cout << "Faculty: ";
    cin >> fac;
 
    getStudentsFaculty( arr, size, fac );
 
    getListStudents( arr, size );
 
    int year;
    cout << "Year: ";
    cin >> year;
    getStudentsAfterYear( arr, size, year );
    _getch();
    return 0;
}

student.h:
Кликните здесь для просмотра всего текста
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
#pragma once
#include <string>
class student
{
private:
    string name;
    int year;
    string address;
    string telephone;
    string faculty;
    int course;
public:
    student(){};
    ~student(){};
    void set_name(string);
    string get_name();
    void set_year(int);
    int get_year();
    void set_address(string);
    string get_address();
    void set_telephone(string);
    string get_telephone();
    void set_faculty(string);
    string get_faculty();
    void set_course(int);
    int get_course();
};

student.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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "student.h"
#include <iostream>
#include <string>
using namespace std;
void student::set_name(string p_name)
{
    name=p_name;
}
string student::get_name()
{
    return name;
}
//----------------------------------------
void student::set_year(int p_year)
{
    year=p_year;
}
int student::get_year()
{
    return year;
}
//----------------------------------------
void student::set_address(string p_address)
{
    address=p_address;
}
string student::get_address()
{
    return address;
}
//----------------------------------------
void student::set_telephone(string p_telephone)
{
    telephone=p_telephone;
}
string student::get_telephone()
{
    return telephone;
}
//----------------------------------------
void student::set_faculty(string p_faculty)
{
    faculty=p_faculty;
}
string student::get_faculty()
{
    return faculty;
}
//----------------------------------------
void student::set_course(int p_course)
{
    course=p_course;
}
int student::get_course()
{
    return course;
}
//----------------------------------------


Отношения никакого, это один и тот же класс, просто записан дважды.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.01.2014, 22:46 #6
Цитата Сообщение от iga7013 Посмотреть сообщение
Отношения никакого, это один и тот же класс, просто записан дважды.
Один и тот же? В одном ни одного метода, а в другом четырнадцать? И это - один и тот же класс? Вы уж, как-нибудь, разберитесь со своими классами и кодами, прежде чем тему создавать.
0
21.01.2014, 22:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2014, 22:46
Привет! Вот еще темы с ответами:

Подключение заголовочных файлов - C++
Имею два файла Large Factorial.h #include &lt;sstream&gt; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;math.h&gt; #include...

Подключение сторонних заголовочных файлов - C++
есть 2 репозитория с моим проектом, и с файлами которые пишутся для нескольких проектов, можно ли подключить их не перенося в мой проект?...

Правильное подключение заголовочных файлов - C++
Всем привет!!!Начал разбираться с ООП , и ... тут же возникла проблема. Пишу программу следующую есть два класса футболист и команда и...

Перекрестное подключение заголовочных файлов - C++
Пишу программу и появилась необходимость подключать в двух модулях заголовочные файлы один одного, при этом один из хедеров не...


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

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

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