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

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

Войти
Регистрация
Восстановить пароль
 
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
#1

Разделить программу на файлы - C++

10.01.2013, 22:07. Просмотров 630. Ответов 14
Метки нет (Все метки)

Помогите мне разделить программу на три файла: сам класс, функции к нему, и функция main.
Сам класс
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
#ifndef ARRAY1_H
#define ARRAY1_H
 
#include <iostream.h>
 
class Array{
      
      friend ostream &operator<<(ostream &, Array &);
      friend istream &operator>>(istream &, Array &);
public:
       Array(int =10);
       Array(const Array &);
       ~Array();
       int getSize() const;
       const Array &operator=(const Array &);
       
       int operator==(const Array &) const;
       int operator!=(const Array &) const;
       
       int &operator[](int);
       static int getArrayCount();
       
private:
        int *ptr;
        
        int size;
        static int arrayCount;
        
};
 
#endif
Вот эту программу нужно разделить на два файла: функции и главная функция main
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <iostream.h>
#include <stdlib.h>
#include <assert.h>
#include "array1.h"
 
int Array::arrayCount=0;
 
Array::Array(int arraySize)
{
                 ++arrayCount;
                 size=arraySize;
                 ptr=new int [size];
                 assert(ptr!=0);
                 
                 for(int i=0;i<size;++i)
                   ptr[i]=0;
                 }
Array::Array(const Array &init)
{
                   ++arrayCount;
                   size=init.size;
                   ptr=new int [size];
                   assert(ptr!=0);
                   
                   for(int i=0;i<size;i++)
                     ptr[i]=init.ptr[i];
                   }
Array::~Array()
{
         --arrayCount;
         delete [] ptr;
  }
  
int Array::getSize() const {return size;}
 
const Array &Array::operator=(const Array &right)
{
      if(&right != this){
                delete [] ptr;
                size = right.size;
                ptr = new int [size];
                assert(ptr!=0);
                
                for(int i=0;i<size;i++)
                   ptr[i]=right.ptr[i];
                   }
                   return *this;
}
 
int Array::operator==(const Array &right) const
{
    if(size!=right.size)
      return 0;
    for(int i=0;i<size;i++)
      if(ptr[i]!=right.ptr[i])
        return 0;
      
      return 1;
}
 
int Array::operator!=(const Array &right) const
{
    if(size!=right.size)
      return 1;
    for(int i=0;i<size;i++)
      if(ptr[i]!=right.ptr[i])
        return 1;
      
      return 0;
}
 
int &Array::operator[](int subscript)
{
    assert(0<=subscript && subscript < size);
    
    return ptr[subscript];
}
 
int Array::getArrayCount(){return arrayCount;}
 
istream &operator>>(istream &input, Array &a)
{
        for(int i=0;i<a.size;i++)
          input>>a.ptr[i];
          
        return input;
        }
ostream &operator<<(ostream &output, Array &a)
{
        for(int i=0;i<a.size;i++){
           output<<a.ptr[i]<<" ";
           
           if((i+1)%10==0)
             output<<endl;
             }
        
        return output;
}
 
 
 
 
        int main()
{
    cout<<"Number created array = "<<Array::getArrayCount()<<endl;
    
    Array integers1(7),integers2;
    
    cout<<"Number created array = "<<Array::getArrayCount()<<endl<<endl;
    
    cout<<"Size array integers1 = "<<integers1.getSize()<<endl<<"Array after set value:"<<endl<<integers1<<endl;
    
    cout<<"Size array integers2 = "<<integers2.getSize()<<endl<<"Array after set value:"<<endl<<integers2<<endl;
    
    cout<<"Enter 17 int namber:"<<endl;
    
    cin>>integers1>>integers2;
    
    cout<<"After enter array contains:"<<endl<<"integers1: "<<integers1<<"integers2: "<<integers2<<endl;
    
    cout<<"Rating: integers1 != integers2"<<endl;
    
    if(integers1 != integers2)
      cout<<"They are not equal"<<endl;
    
    Array integers3(integers1);
    
    cout<<endl<<"Size array integers3 = "<<integers3.getSize()<<endl<<"Array after set value:"<<endl<<integers3<<endl;
    
    cout<<"integers1 = integers2"<<endl;
    
    cout<<"integers1:"<<integers1<<endl<<"integers2:"<<integers2<<endl;
    
    cout<<"Rating: integers1 == integers2"<<endl;
    
    if(integers1==integers2) 
      cout<<"They are equal"<<endl<<endl;
    
    cout<<"Integers1[5] == "<<integers1[5]<<endl;
    
    cout<<"integers1[5]=1000"<<endl;
    integers1[5]=1000;
    
    cout<<"integers1: "<<integers1<<endl;
    
    cout<<"integers1[15] = 1000, error, maxlength"<<endl;
    
    //integers1[15]=1000;
    
    system("pause>0");
    
    return 0;
    
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2013, 22:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разделить программу на файлы (C++):

Как разделить программу ну файлы - C++
Можете объяснить на любом простеньком примере)

как разделить код на файлы? - C++
Class.h #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class File { private: char *name, *date; int ...

Не могу разделить template метод в .h и .cpp файлы - C++
Писал для проверки мини прогу, там все работает: class.h #pragma once #include &lt;Windows.h&gt; class Class { public: ...

Помогите разделить программу по блокам - C++
Еще не пропало желание помогать? :-) Очень на это надеюсь, потому что такие вещи в книжках и MSDN е практически не освещены... :-( ...

Разделить программу на несколько файлов - C++
Прошу помощи в решение , как правильно разделить программу на на класс с его функциями и отдельно функцию входа #include&lt;iostream&gt; ...

Как разделить программу на функции - C++
Не знаю как разделить программу на функции. Буду рад если поможете :) #include &quot;stdafx.h&quot; #include &quot;locale.h&quot; #include &lt;iostream&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
10.01.2013, 23:04
  #2

Не по теме:

Операция копипаста? Или что Вы не можете сделать?

1
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
10.01.2013, 23:10  [ТС] #3
Когда я функции оформляю в отдельный .cpp файл, то эти функции не видит функция main. Как меня сделать так, чтобы функция main видела эти функции но они находились в в разных файлах?
0
Croessmah
Эксперт CЭксперт С++
13214 / 7486 / 842
Регистрация: 27.09.2012
Сообщений: 18,402
Записей в блоге: 3
Завершенные тесты: 1
10.01.2013, 23:13 #4
в array1.cpp и main.cpp
C++
1
#include "array1.h"
Дальше смотрите по ошибкам компилятора. Мало ли что за ошибки он нашел.
0
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
10.01.2013, 23:13  [ТС] #5
Я понял! Просто нужно было написать вот так
C++
1
#include "array1.cpp"
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
10.01.2013, 23:14 #6
объявить эти функции в мейне или его заголовке, а реализовать в отдельном срр файле.
Среда разработки сама всё соберёт

Добавлено через 19 секунд
Цитата Сообщение от tokar2 Посмотреть сообщение
#include "array1.cpp"
НЕТ! тебе написали не так. Самое частое заблуждение начинающих - они думают, что при раздельной компиляции cpp файлы должны всё друг о друге знать и включаться друг в друга.
0
Croessmah
Эксперт CЭксперт С++
13214 / 7486 / 842
Регистрация: 27.09.2012
Сообщений: 18,402
Записей в блоге: 3
Завершенные тесты: 1
10.01.2013, 23:14 #7
Цитата Сообщение от tokar2 Посмотреть сообщение
C++
1
#include "array1.cpp"
Не подключайте .cpp файлы таким образом
0
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
10.01.2013, 23:15  [ТС] #8
Я просто не знал как подключить .cpp файл в программу, думал что он сам подключится)

Добавлено через 34 секунды
А каким тогда образом?
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
10.01.2013, 23:17 #9
никаким, я же сказал: никаких инклудов. Включай его в проект - IDE сама разберётся
0
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
10.01.2013, 23:19  [ТС] #10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
НЕТ! тебе написали не так. Самое частое заблуждение начинающих - они думают, что при раздельной компиляции cpp файлы должны всё друг о друге знать и включаться друг в друга.
Можете это как-то аргументировать? Так как я начинающий мне интересно, почему?
0
Croessmah
Эксперт CЭксперт С++
13214 / 7486 / 842
Регистрация: 27.09.2012
Сообщений: 18,402
Записей в блоге: 3
Завершенные тесты: 1
10.01.2013, 23:23 #11
Цитата Сообщение от tokar2 Посмотреть сообщение
А каким тогда образом?
Какая у Вас IDE и компилятор?
На студии при небольшой модернизации все компилируется без проблем

Добавлено через 2 минуты
Цитата Сообщение от tokar2 Посмотреть сообщение
Можете это как-то аргументировать? Так как я начинающий мне интересно, почему?
Соседняя тема: Вызов функции из другого файла
0
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
10.01.2013, 23:26  [ТС] #12
Компилятор Dev C++. И теперь тупой вопрос, что такое IDE?)
0
Croessmah
Эксперт CЭксперт С++
13214 / 7486 / 842
Регистрация: 27.09.2012
Сообщений: 18,402
Записей в блоге: 3
Завершенные тесты: 1
10.01.2013, 23:29 #13
Цитата Сообщение от tokar2 Посмотреть сообщение
И теперь тупой вопрос, что такое IDE?
Как раз Dev C++ - это не компилятор, а IDE
Интегрированная среда разработки

А компилятор там, наверное, MinGW(GCC)
1
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
10.01.2013, 23:47 #14
Цитата Сообщение от tokar2 Посмотреть сообщение
Можете это как-то аргументировать? Так как я начинающий мне интересно, почему?
Потому что существует такое понятие "раздельная компиляция". Компилятор может генерировать из СРР файла промежуточный код, совершенно не волнуясь, что в коде недостаточно некоторых переменных и функций.

Непосредственным выполнением директивы #include (грубо говоря копипастингом одного файла в другой) занимается не компилятор, а препроцессор, да. Но если попытаться использовать эту директиву, окажется, что в проекте продублированы некоторые функции.

После работы препроцессора компилятор должен скомпилировать каждый срр файл по отдельности. При этом, в срр файле могут использоваться внешние переменные и функции из других файлов. Компилятору их нужно только их declaration, т.е объявление без тела, чтобы просто сгенерировать вызов с аргументами в правильном порядке или выдать ошибку о синтаксически неправильном вызове функции.

Таким образом, компилятор генерирует промежуточный файл, в котором все функции грамотно вызываются по своему адресу, а вот по какому именно адресу позже разберётся не компилятор, а линкер. При этом одно из достоинств раздельной компиляции то, что при добавлении в проект нового кода(или изменении какого-то срр-файла) остальные файлы не требуется перекомпилировать. К тому же, в программу помимо скомпилированных cpp файлов могут быть включены сторонние библиотеки функций. (файлы с расширением .lib) Все эти куски кода собираются линкером в один exe файл. Он и разбирает, куда ведёт вызов какой функции, и если ты неправильно их объявил или забыл объявить, то выдаёт "Linker error". При этом синтаксис программы был абсолютно грамотный, поэтому компилятор их спокойно прожевал и отдал линкеру.
1
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
10.01.2013, 23:56  [ТС] #15
А можно сделать два заголовочних файлы, это будет лучше чем подключать .cpp?
C++
1
2
#include "array1.h"
#include "array2.h"
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2013, 23:56
Привет! Вот еще темы с ответами:

Как разделить программу на функции - C++
Не могу понять как мне разделить прогу на функции и вообще плохо понимаю что такое функции. Буду рад помощи. #include &quot;stdafx.h&quot; ...

Как разделить программу на модули в Dec C++ - C++
Как происходит деление на модули в С++? вот например в Delphi я создавал новый unit и в обоих файлах прописывал доступ к друг другу через...

Как разделить программу на две части? - C++
Доброй ночи! Такой вопрос: как мне разделить программу на две части? Есть два задания, но чтобы не создавать разные файлы, я хочу их...

Разбить программу на файлы - C++
Вот в качестве примера, что разделить (пока что это одной программой) #include &lt;iostream&gt; using namespace std; struct COR ...


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

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

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