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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.70
Unwebo
20 / 20 / 3
Регистрация: 13.04.2012
Сообщений: 38
#1

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

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

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

Хочу создать класс, в котором основной функционал находится в одной паре *.h, *.cpp, а дополнительный в других. Что бы при написании программ можно было подключать нужный мне функционал и не компилировать лишнее.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2012, 19:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объявление класс в нескольких файлах (C++):

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

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

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

Использование enum в нескольких файлах - C++
Как объявить или куда поместить enum mode{x, y, z} чтобы его можно было использовать в файлах f1.h и f2.h ? (mode- один из аттрибутов...

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

Подключение одной директивы в нескольких файлах - C++
Здравствуйте форумчане!Изучаю классы и столкнулся с такой ошибкой : Понял что эта ошибка связана с тем что я подключаю заголовочный...

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

Обычно так делают с 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
    {
        ...
    };
}
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.06.2012, 20:09 #4
Цитата Сообщение от cppGhost Посмотреть сообщение
А если нужны классы с одинаковыми именами так можно сделать с использованием пространств имен
А зачем разные классы с одинаковыми именами в одном проекте?
Unwebo
20 / 20 / 3
Регистрация: 13.04.2012
Сообщений: 38
21.06.2012, 20:18  [ТС] #5
Класс один.

В файлах 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();    
};
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.06.2012, 20:20 #6
Unwebo, я спрашивал у cppGhost. А вам могу предложить только наследоваться от класса. Неужели он такой большой, что это критично?
cppGhost
32 / 30 / 1
Регистрация: 21.06.2012
Сообщений: 91
21.06.2012, 20:34 #7
Насколько я понял в одном проекте они не будут, поэтому и предложил namespace, хотя это уже так, от фантазии. А по сути, идея выглядит как-то надуманно. То есть ТС хочет объявить в основном файле объявить класс, а потом подставлять h и cpp? И при этом реализовать одинаковые по интерфейсу классы, но с разной реализацией?
Finale
13 / 13 / 1
Регистрация: 12.01.2012
Сообщений: 49
21.06.2012, 20:59 #8
ТС хочет 1 класс, функционал которого разбит по другим файлам. Для класса уравнений, например, в 1.h функция решает для действительных чисел, а коль числа комплексные то подключаем 2.h.

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

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

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

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

Не по теме:

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

sandye51
программист С++
682 / 584 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
21.06.2012, 21:33 #11
да вообще это извращенство какое-то
даже если сделать производный класс, то он все равно будет использовать функционал базового, поэтому такое
Цитата Сообщение от Unwebo Посмотреть сообщение
Что бы при написании программ можно было подключать нужный мне функционал и не компилировать лишнее.
не прокатит
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.06.2012, 21:47 #12
Цитата Сообщение от sandye51 Посмотреть сообщение
даже если сделать производный класс, то он все равно будет использовать функционал базового
sandye51, разумеется, я предложил такой вариант основываясь на
Цитата Сообщение от Unwebo Посмотреть сообщение
в котором основной функционал находится в одной паре *.h, *.cpp, а дополнительный в других
Finale
13 / 13 / 1
Регистрация: 12.01.2012
Сообщений: 49
21.06.2012, 22:54 #13
Jupiter, я думал я достаточно толсто указал, что мой вариант 4fun only, что квадратное уравнение есть пример, а также посоветовал автору отказаться от этой затеи.
Но спасибо за напоминание, да.
Evg
Эксперт CАвтор FAQ
17621 / 5845 / 375
Регистрация: 30.03.2009
Сообщений: 16,123
Записей в блоге: 26
23.06.2012, 11:39 #14
Цитата Сообщение от Unwebo Посмотреть сообщение
Можноли как-то объявление одного класса разбить на несколько заголовочных файлов?
Нельзя. Объявление класса должно быть неразрывным. Реализации методов можешь распихать хоть по тысяче файлов *.cpp
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2012, 11:39
Привет! Вот еще темы с ответами:

Класс: объявление и реализация - C++
// CColor.h class CColor { public: CColor(); CColor(Uint8 _r, Uint8 _g, Uint8 _b, Uint8 _a); void operator()(Uint8 _r, Uint8...

Подключение с помощью директивы #include нескольких функций, находящихся в разных файлах. - C++
Здравствуйте, уважаемые программисты. Помогите, пожалуйста, разобраться в такой ситуации: есть несколько функций, каждая из которых...

Как расположить шаблонный класс в разных файлах? - C++
Есть некоторый класс A, он размещен в разных файлах так: main.cpp : #include <iostream> #include "a.h" int main() { A a; } ...

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


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

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

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