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

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

Войти
Регистрация
Восстановить пароль
 
Fedek
2 / 2 / 1
Регистрация: 05.09.2011
Сообщений: 39
#1

Раздельная компиляция. Преобразовать код в многофайловое приложение - C++

07.05.2014, 16:12. Просмотров 335. Ответов 5
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <string>
#include <stdio.h>
using namespace std;
int main( int argc, char* argv[])
{
int a, n, i;
string k;
if (argc == 2) {
        k = argv[1];
        n= k.length();
        a = 0;
        for (i=0; i<=n; i++)
                {
                        if (k[i]>='0'&& k[i]<='9')
                                {
                                a++;
                                }
                }
}
printf("Number of digits: %d", a);
}

Вот пример по которому нужно сделать
В заголовочном файле (summ.h) будет содержаться описание класса.
C++
1
2
3
4
5
6
7
8
9
10
11
#ifndef SUMM_H
#define SUMM_H
class CSumm {
public:
CSumm(int v1, int v2);
int calculate();
private:
int a;
int b;
};
#endif

В файле (summ.cpp) будет содержаться реализация описанного класса.
C++
1
2
3
4
5
6
7
8
#include "summ.h"
CSumm::CSumm(int v1, int v2) {
a = v1;
b = v2;
}
int CSumm::calculate() {
return a + b;
}
Модифицированный файл main.cpp с точкой входа в программу.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include "summ.h"
int main( int argc, const char* argv[] )
{
int x;
int y;
if ( argc == 3 )
{
x = atoi( argv[1] );
y = atoi( argv[2] );
CSumm * calc = new CSumm(x, y);
std::cout <<x<<" + "<<y<<"=" << calc->calculate() << std::endl;
26
}
return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2014, 16:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Раздельная компиляция. Преобразовать код в многофайловое приложение (C++):

Раздельная компиляция в Code::Blocks - как правильно разместить код в файлах? - C++
В проекте code blocks есть функция main, несколько функций, которые подключаются как статические библиотеки, и структура (struct), которая...

Раздельная компиляция: как быть, если код не компилируется, так как два файла подключают друг друга? - C++
Доброго времени суток. У меня есть какой-нибудь x.h: #include &quot;y.h&quot; class A { vector&lt;B*&gt; v; } и y.h:

Раздельная компиляция - C++
Здравствуйте, я перечитал на форуме информацию по этой теме, но пока что не сумел разобраться. У меня в проекте такие файлы: ...

Раздельная компиляция - C++
Пусть есть программа, которая состоит из 2 файлов. 1 файл: основной, там где main 2 файл: содержит некоторые функции Также есть...

Раздельная компиляция - C++
В Гугле не забанен,нашел описание самого принципа,но конкретных примеров не нашел. Вопросы вот какие: 1) Если у меня есть класс,...

раздельная компиляция - C++
Вот есть три файла: заголовочный файл с классом (.h), файл с реализацией методов класса (.cpp), и функцию main. Как, корректно, выполнить...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
07.05.2014, 16:24 #2
У тебя всего одна функция в коде! О какой раздельной компиляции речь? Ты хоть осознаёшь, для чего она нужна или как попугай повторяешь то, что в школе услышал?

Сравни со своим примером и подумай, что в твоём примере разделёется и что нужно тебе?
В твоём примере есть класс: и для удобства программиста и ускорения билда приложения, методы этого класса и основной код программы помещаются в разные единицы компиляции.Это удобно, да.
Даже если бы в коде не было классов, а был бы просто набор глобальных функций - их тоже можно было б распихать по разным файлам. Это тоже удобно, да!

А теперь посмотри на свой пример и найди в нём, что ты хочешь вынести из главного файла? Хоть глобальную функцию, хоть функцию-член, хоть что-то!
Fedek
2 / 2 / 1
Регистрация: 05.09.2011
Сообщений: 39
07.05.2014, 16:28  [ТС] #3
это один из пунктов в лабе по компиляции и оптимизации в freebsd, все сделал, кроме этого, не получается никак
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
07.05.2014, 16:38 #4
У тебя всего одна функция в коде! О какой раздельной компиляции речь? Ты хоть осознаёшь, для чего она нужна или как попугай повторяешь то, что в школе услышал?

Сравни со своим примером и подумай, что в твоём примере разделёется и что нужно тебе?
В твоём образце есть класс: и для удобства программиста и ускорения билда приложения, методы этого класса и основной код программы помещаются в разные единицы компиляции.Это удобно, да.
Даже если бы в коде не было классов, а был бы просто набор глобальных функций - их тоже можно было б распихать по разным файлам. Это тоже удобно, да!

А теперь посмотри на свою программу, что ты изменить хочешь! И найди в нём, что ты хочешь вынести из главного файла? Хоть глобальную функцию, хоть функцию-член, хоть что-то!

Добавлено через 9 минут
Цитата Сообщение от Fedek Посмотреть сообщение
это один из пунктов в лабе по компиляции и оптимизации в freebsd, все сделал, кроме этого, не получается никак
при чём тут убогий freebsd? - не отвлекайся от сути задания
у тебя среди этих "пунктов задания" не было пункта "написать программу, разбив код на функции"? Не?
IrineK
Заблокирован
07.05.2014, 16:39 #5
Fedek,
Kuzia domovenok вам тут доказывает, что необходимо логику решения выделить из main() в отдельную функцию. Тогда можно будет и в файлы разбрасывать. Пока разбрасывать нечего.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
07.05.2014, 16:44 #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
файл 1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <string>
#include <stdio.h>
using namespace std;
void printDigits(std::string);
int main( int argc, char* argv[])
{
int a, n, i;
string k;
if (argc == 2) {
        k = argv[1];
        printDigits(k);
}
else 
printf("only 1 parameter expected, received %d\n", argc-1);
}
файл 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <string>
#include <stdio.h>
void printDigits(std::string k){     
        int a, n, i;
        n= k.length();
        a = 0;
        for (i=0; i<=n; i++)
                {
                        if (k[i]>='0'&& k[i]<='9')
                                {
                                a++;
                                }
                }
        printf("Number of digits: %d", a);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2014, 16:44
Привет! Вот еще темы с ответами:

Раздельная компиляция и шаблоны - C++
Есть 3 файла с кодом: 1) foo.hpp template&lt;typename T&gt; class foo { public: T bar; foo(); ~foo(); };

Шаблоны и раздельная компиляция - C++
Здравствуйте! Если просто я пишу класс, например: class Test { private: int *pm; ... public: bool inc();

Раздельная компиляция файлов - C++
Если класс определен в раздельных файлах и изменения сделаны в части main программы, кот использует класс - какой файл необходимо...

Многофайловое приложение в CodeBlocks - C++
задание состоит в том,что надо переделать программу через функции вот что получилось у меня что я делаю не так? файл main.cpp: ...


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

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

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