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

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

Восстановить пароль Регистрация
 
Fedek
2 / 2 / 1
Регистрация: 05.09.2011
Сообщений: 39
07.05.2014, 16:12     Раздельная компиляция. Преобразовать код в многофайловое приложение #1
нужна помощь в преобразовании кода программы для разделенной трансляции (заголовочный код, код реализации класса и сам модифицированный код программы).

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++ Шаблоны и раздельная компиляция
Раздельная компиляция ошибка LNK2019 C++
C++ Раздельная компиляция
Раздельная компиляция файлов C++
раздельная компиляция C++
Раздельная компиляция и шаблоны C++
C++ Раздельная компиляция
Создание классов в С++. Раздельная компиляция C++
Раздельная компиляция C++
Раздельная компиляция ( Code blocks) C++
C++ Раздельная компиляция: как быть, если код не компилируется, так как два файла подключают друг друга?
C++ Раздельная компиляция в Code::Blocks - как правильно разместить код в файлах?

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

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

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

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

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

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

Добавлено через 9 минут
Цитата Сообщение от Fedek Посмотреть сообщение
это один из пунктов в лабе по компиляции и оптимизации в freebsd, все сделал, кроме этого, не получается никак
при чём тут убогий freebsd? - не отвлекайся от сути задания
у тебя среди этих "пунктов задания" не было пункта "написать программу, разбив код на функции"? Не?
IrineK
Заблокирован
07.05.2014, 16:39     Раздельная компиляция. Преобразовать код в многофайловое приложение #5
Fedek,
Kuzia domovenok вам тут доказывает, что необходимо логику решения выделить из main() в отдельную функцию. Тогда можно будет и в файлы разбрасывать. Пока разбрасывать нечего.
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 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);
}
Yandex
Объявления
07.05.2014, 16:44     Раздельная компиляция. Преобразовать код в многофайловое приложение
Ответ Создать тему
Опции темы

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