Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Nik-
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 343
#1

Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере - C++

24.12.2015, 17:41. Просмотров 477. Ответов 8
Метки нет (Все метки)

Есть класс, содержащий объекты и конструктор. Конструктор объявляется в одном из cpp файлов(их несколько). Можно ли, как-то, использовать один общий конструктор, а не постоянно его объявлять в разных файлах?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2015, 17:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере (C++):

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года "весна", "лето", "осень", "зима" определить...

Что такое "широкие" и "узкие" С-строки
Гуглила, и не нашла более-менее нормального ответа на вопрос: "Что же такое...

Реализация класса "Студент" и наследование от него класса "Аспирант"
Помогите, пожалуйста! Создать абстрактный базовый класс Person, описывающий...

С++ консольное приложение win32, матерится на первое "pow" после "if", а на "system" говорит что неопределён.
#define _CRT_SECURE_NO_WARNINGS #include "stdafx.h" #include <math.h> ...

Для каждой строки найти слова, которые не имеют ни одного из букв: "l", "k", "r", "s" i "j"
Задано символьные строки. Строка состоит из нескольких слов (наборов символов),...

Что Вы понимаете под "абстрактным типом", "абстракцией данных" и "абстрактными операциями"?
А давайте займёмся археологией! И проследим как менялся смысл понятий...

8
nord_v
329 / 177 / 80
Регистрация: 22.08.2013
Сообщений: 724
24.12.2015, 17:52 #2
Цитата Сообщение от Nik- Посмотреть сообщение
Есть класс, содержащий объекты и конструктор.
Объявление класса в .h файле?
Цитата Сообщение от Nik- Посмотреть сообщение
Конструктор объявляется в одном из cpp файлов(их несколько).
Определение (реализация), наверное, а не объявление?

Добавлено через 3 минуты
Обычно так делается: объявление класса - в .h файле (с защитой от повторного включения), реализации функций класса - в .cpp файле. В .cpp файлах, где необходимо использовать класс, делается инклуд .h файла с классом.
0
Nik-
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 343
24.12.2015, 18:08  [ТС] #3
Да, класс в .h находится. Немного не понял это
объявление класса - в .h файле (с защитой от повторного включения), реализации функций класса - в .cpp файле.
. Получается в .h интерфейс класса, а в .cpp описать сами функции ?
0
gru74ik
Модератор
Эксперт CЭксперт С++
4648 / 1962 / 293
Регистрация: 20.02.2013
Сообщений: 5,225
Записей в блоге: 23
24.12.2015, 18:09 #4
Nik-, может уже код покажете?
1
Nik-
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 343
24.12.2015, 18:12  [ТС] #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
#ifndef antiBirusH
#define antiBirusH
 
#include <string>
#include <stdio.h>
#include <fstream>
#include <sstream>
#include <windows.h>
 
using namespace std;
 
class antiVirus {
private:
    string bytes;
    string signature;
    char* pathToSuspect; // Путь к файлу
    string data;
    int p;
 
public:
    antiVirus(char* pathToFile) {
        pathToSuspect = pathToFile;
    }
 
    bool scan() {
 
        ostringstream oss; // Поток для записи из файла в переменную.
        ifstream base("Base.bas"); // Поток чтения из файла
        ifstream suspectFile(pathToSuspect, ios_base::binary);
        // Потое открытия проверяемого файла
 
        bool flag = false;
        // Флаг, определяющий наличие вируса. 1 - есть, 0 - нет.
 
        oss << suspectFile.rdbuf();
        // Записываем в поточную переемнную текст из файла, открытого в двоичном режиме
        data = oss.str(); // содержимое файла записываем в data
 
        suspectFile.close(); // закрываем файл
 
        while (getline(base, bytes))
            // Пока идет запись текста из базы в переменную
        {
            for (int i = 0; i < bytes.size(); i += 2)
                signature +=
                    static_cast<char>(strtol(bytes.substr(i, 2).c_str(),
                NULL, 16)); // Записываем в переменную сигнатуру
            if ((p = data.find(signature)) != string::npos)
                // ищем нужную последовательность в последовательности файла
            {
                // data.erase(Var.p, Var.signature.size());
                flag = true; // Флаг - 1. Вирус обнаружен
                break; // Останавливаем цикл
            }
            else {
                bytes = "";
                signature = "";
            }
        }
 
        return flag;
    }
 
    bool Treat() {
        ofstream review(pathToSuspect, ofstream::binary, ofstream::trunc);
        review << data; // Записываем измененные данные файл(файл безопасен)
        review.close();
 
        if (scan(pathToSuspect) == false) {
            return false; // Вируса нет
        }
        else
            return true; // Вирус есть
    }
 
    bool Delete() {
        if (remove(pathToSuspect) != 0)
            return false; // Файл не удален
        else
            return true; // Файл удален
    }
 
};
 
#endif
Все три функции должны быть в разных .cpp файлах.
0
gru74ik
Модератор
Эксперт CЭксперт С++
4648 / 1962 / 293
Регистрация: 20.02.2013
Сообщений: 5,225
Записей в блоге: 23
24.12.2015, 18:25 #6
Nik-, ну, вот примерно так:

main.cpp
C++
1
2
3
4
5
6
7
8
// needed headers here
 
int main()
{
    // Your code here.
    
    return 0;
}


antiVirus.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef ANTIVIRUS_H
#define ANTIVIRUS_H
 
#include <string>
 
class antiVirus
{
public:
    antiVirus(char* pathToFile);
    bool scan();
    bool Treat();
    bool Delete();
    
private:
    std::string bytes;
    std::string signature;
    char pathToSuspect; // Путь к файлу
    std::string data;
    int p;
};
 
#endif // ANTIVIRUS_H


antiVirus.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
#include "antiVirus.h"
 
antiVirus::antiVirus()
{
    pathToSuspect = pathToFile;
}
 
bool antiVirus::scan()
{
 
    ostringstream oss; // Поток для записи из файла в переменную.
    ifstream base("Base.bas"); // Поток чтения из файла
    ifstream suspectFile(pathToSuspect, ios_base::binary);
    // Потое открытия проверяемого файла
 
    bool flag = false;
    // Флаг, определяющий наличие вируса. 1 - есть, 0 - нет.
 
    oss << suspectFile.rdbuf();
    // Записываем в поточную переемнную текст из файла, открытого в двоичном режиме
    data = oss.str(); // содержимое файла записываем в data
 
    suspectFile.close(); // закрываем файл
 
    while (getline(base, bytes))
        // Пока идет запись текста из базы в переменную
    {
        for (int i = 0; i < bytes.size(); i += 2)
            signature +=
                static_cast<char>(strtol(bytes.substr(i, 2).c_str(),
            NULL, 16)); // Записываем в переменную сигнатуру
        if ((p = data.find(signature)) != string::npos)
            // ищем нужную последовательность в последовательности файла
        {
            // data.erase(Var.p, Var.signature.size());
            flag = true; // Флаг - 1. Вирус обнаружен
            break; // Останавливаем цикл
        }
        else {
            bytes = "";
            signature = "";
        }
    }
 
    return flag;
}
 
bool antiVirus::Treat()
{
    ofstream review(pathToSuspect, ofstream::binary, ofstream::trunc);
    review << data; // Записываем измененные данные файл(файл безопасен)
    review.close();
 
    if (scan(pathToSuspect) == false) {
        return false; // Вируса нет
    }
    else
        return true; // Вирус есть
}
 
bool antiVirus::Delete()
{
    if (remove(pathToSuspect) != 0)
        return false; // Файл не удален
    else
        return true; // Файл удален
}
1
nord_v
329 / 177 / 80
Регистрация: 22.08.2013
Сообщений: 724
24.12.2015, 18:25 #7
Цитата Сообщение от Nik- Посмотреть сообщение
Получается в .h интерфейс класса, а в .cpp описать сами функции ?
Можешь вынести их в отдельный .cpp, можешь оставить как есть (они будут inline). В чём проблема? Подключай файл .h с классом там, где нужно (в других .cpp)/
1
Nik-
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 343
24.12.2015, 18:34  [ТС] #8
Спасибо. Я думал, что можно обойтись одним конструктором класса на все .cpp файлы.
0
nord_v
329 / 177 / 80
Регистрация: 22.08.2013
Сообщений: 724
24.12.2015, 18:44 #9
Цитата Сообщение от Nik- Посмотреть сообщение
Я думал, что можно обойтись одним конструктором класса на все .cpp файлы.
Там, где вызываются функции класса (или создаются объекты класса), компилятор должен видеть, что они из себя представляют (видеть объявление класса).
1
24.12.2015, 18:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2015, 18:44
Привет! Вот еще темы с решениями:

Visual Studio не читает операторы, что начинаются на "glu" ("gluBuild2DMipmaps", "gluPerspective")
Данный код должен выводить на экран кубик который должен вращаться, но возникла...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование)
Разработать программу с использованием наследования классов, реализующую...

Что означают команды "fun", "my_max", "my_min" в C++?
Мне нужно защищать программу, а я писал её не сам, и в универе мы эти команды...

Зачем перегружать операторы "++", "<<", ">>" и что они дают?
Здравствуйте. Я хотел спросить зачем перегружать оператор &quot;++&quot;, &quot;&lt;&lt;&quot;, &quot;&gt;&gt;&quot; и...


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

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

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