Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
26 / 26 / 3
Регистрация: 13.04.2012
Сообщений: 61

Объявление класс в нескольких файлах

21.06.2012, 19:54. Показов 6982. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можноли как-то объявление одного класса разбить на несколько заголовочных файлов?

Хочу создать класс, в котором основной функционал находится в одной паре *.h, *.cpp, а дополнительный в других. Что бы при написании программ можно было подключать нужный мне функционал и не компилировать лишнее.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.06.2012, 19:54
Ответы с готовыми решениями:

Объявление типов в h.-файлах
Нужно объвить несколько переменных нестандартного типа (этот тип объявлен в библиотеке DirectX), компилятор ругается! Получается только с...

Класс объявление с элементом типа класс Текст
Необработанное исключение в "0x770015de" в "FAQ.exe": 0xC0000005: Нарушение прав доступа при записи...

Объявление нескольких переменных
Не знаю почему, но компилятор выдает такие ошибки на этот код. Код конструктораTime::Time() { int h_, int m_, int s_; cin...

13
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.06.2012, 20:02
Сделайте наследников от него.
2
32 / 30 / 6
Регистрация: 21.06.2012
Сообщений: 91
21.06.2012, 20:06
Вообще не совсем понятны исходные данные. Эти два класса как-то связаны между собой? наследуются от базового? Должны иметь одинаковые имена?

Обычно так делают с dll, то есть имеется набор, например, элементов интерфейса (кнопка, список, дерево и т.п.). Соответственно есть несколько dll: buttonEx.dll, listEx.dll, treeEx.dll. Что используется, то и подключается. Хотя вот именно с элентами интерфейса пример немного надуманный. Все же обычно они лежат в какой-нибудь guiEx.dll

А если нужны классы с одинаковыми именами так можно сделать с использованием пространств имен
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace class1
{
    class CSuperClass
    {
        ...
    };
}
 
namespace class2
{
    class CSuperClass
    {
        ...
    };
}
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.06.2012, 20:09
Цитата Сообщение от cppGhost Посмотреть сообщение
А если нужны классы с одинаковыми именами так можно сделать с использованием пространств имен
А зачем разные классы с одинаковыми именами в одном проекте?
0
26 / 26 / 3
Регистрация: 13.04.2012
Сообщений: 61
21.06.2012, 20:18  [ТС]
Класс один.

В файлах file_main.(h/cpp):
C++
1
2
3
4
class CMyClass
{
    CMyClass(); 
};
В файлах file_1.(h/cpp):
C++
1
2
3
4
class CMyClass
{
    Func1();    
};
В файлах file_2.(h/cpp):
C++
1
2
3
4
class CMyClass
{
    Func2();    
};
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.06.2012, 20:20
Unwebo, я спрашивал у cppGhost. А вам могу предложить только наследоваться от класса. Неужели он такой большой, что это критично?
0
32 / 30 / 6
Регистрация: 21.06.2012
Сообщений: 91
21.06.2012, 20:34
Насколько я понял в одном проекте они не будут, поэтому и предложил namespace, хотя это уже так, от фантазии. А по сути, идея выглядит как-то надуманно. То есть ТС хочет объявить в основном файле объявить класс, а потом подставлять h и cpp? И при этом реализовать одинаковые по интерфейсу классы, но с разной реализацией?
0
13 / 13 / 3
Регистрация: 12.01.2012
Сообщений: 49
21.06.2012, 20:59
ТС хочет 1 класс, функционал которого разбит по другим файлам. Для класса уравнений, например, в 1.h функция решает для действительных чисел, а коль числа комплексные то подключаем 2.h.

По-моему, такое можно реализовать с помощью директив препроцессора. Имептся функция-обёртка, принимающая сами параметры, для тоно же уравнения например, и флаг нужной функции для их обработки. Потом по флагу подключаем нужный header и вызываем функцию оттуда.

Проверить возможности нету, медсестра на посту злая, ноутбуки не любит

P.S. Знать не хочу, чем Вас не устраивают классические архитектуры классов, но мне бы и в голову такое не пришло.
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.06.2012, 21:10
Finale, и как вы себе это представляете? Разбить определение класса на несколько файлов - невозможно. А если функция определена в классе, но не реализована, то компилироваться ничего не будет.

Добавлено через 3 минуты
Пока что приходит в голову только define чего-либо, а затем в хедере ifdef/endif. Но должна быть очень весомая причина, чтобы так изворачиваться.
0
21.06.2012, 21:17

Не по теме:

Цитата Сообщение от Finale Посмотреть сообщение
Для класса уравнений, например, в 1.h функция решает для действительных чисел, а коль числа комплексные то подключаем 2.h.
для этого есть шаблоны

0
программист С++
 Аватар для sandye51
860 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
21.06.2012, 21:33
да вообще это извращенство какое-то
даже если сделать производный класс, то он все равно будет использовать функционал базового, поэтому такое
Цитата Сообщение от Unwebo Посмотреть сообщение
Что бы при написании программ можно было подключать нужный мне функционал и не компилировать лишнее.
не прокатит
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.06.2012, 21:47
Цитата Сообщение от sandye51 Посмотреть сообщение
даже если сделать производный класс, то он все равно будет использовать функционал базового
sandye51, разумеется, я предложил такой вариант основываясь на
Цитата Сообщение от Unwebo Посмотреть сообщение
в котором основной функционал находится в одной паре *.h, *.cpp, а дополнительный в других
0
13 / 13 / 3
Регистрация: 12.01.2012
Сообщений: 49
21.06.2012, 22:54
Jupiter, я думал я достаточно толсто указал, что мой вариант 4fun only, что квадратное уравнение есть пример, а также посоветовал автору отказаться от этой затеи.
Но спасибо за напоминание, да.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
23.06.2012, 11:39
Цитата Сообщение от Unwebo Посмотреть сообщение
Можноли как-то объявление одного класса разбить на несколько заголовочных файлов?
Нельзя. Объявление класса должно быть неразрывным. Реализации методов можешь распихать хоть по тысяче файлов *.cpp
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.06.2012, 11:39
Помогаю со студенческими работами здесь

Объявление нескольких функций в head.h
Помогите разобраться. Ниже приведенный код работает у меня. Но меня мучают сомнения, что помещать несколько функций в заголовочный файл...

Объявление глобальных переменной в нескольких библеотеках
Доброго времени суток Имеется БД с несколькими библиотеками в которых много функций. Появилась потребность создать глобальную...

Использование namespace в нескольких файлах
Добрый вечер, хочу спросить, можно ли вот так размещать функции в namespace?: Memory.h #ifndef MEMORY_H #define MEMORY_H ...

Внешняя переменная в нескольких файлах
file01.h #ifndef FILE01_H_ #define FILE01_H_ int blem = 1; #endif file02.h

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru