С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690

Не использовать имя класса при его реализации

01.08.2013, 22:35. Показов 956. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Из-за того, что не смог грамотно сформулировать свой вопрос, не нашел ничего в гугле
Поэтому объясню на примере:
Допустим, есть некий класс Example, объявление которого заключено в заголовочный файл Example.h:

C++
1
2
3
4
5
6
7
8
9
#ifndef EXAMPLE_H
#define EXAMPLE_H
 
class Example
{
    Example();
};
 
#endif
Теперь мне нужно написать определение класса, т.е., собственно, его реализацию (в отдельном cpp файле). Это можно сделать таким способом:

C++
1
2
3
4
5
#include "Example.h"
 
Example::Example()
{
};
Теперь вопрос - можно ли при реализации класса избавиться от постоянного указания имени класса? Т.е. примерно так:

C++
1
2
3
4
5
6
7
#include "Example.h"
 
.....
 
Example()
{
};
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.08.2013, 22:35
Ответы с готовыми решениями:

При перегрузке оператора для класса не получается использовать имя переменной такое же, как в описании класса
Описал первый класс,затем - описал второй класс, используя первый,и когда начал перезагружать оператор для второго класса, вылезла...

Объявление класса без его реализации
Добрый день! Я (вроде бы) знаю как объявлять класс, не подключая его в хедере class MyClass; ... public: myFunc(MyClass);

Отделение интерфейса класса от его реализации
Всем привет! Прочитал все найденные похоже темы, но ответа на свой вопрос я не нашел. Поэтому создаю тему... Хочу отделить интерфейс...

9
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
02.08.2013, 00:35
Нормально — нет.

Технически — да:
C++
1
2
3
4
5
6
7
8
9
10
11
// [ example.h ]
class Example {
#   include "example.cpp";
};
 
 
// [ example.cpp ]
Example()
{
    //...
}
(этим и сотней других вырвиглазных способов + всякие макросы)
2
1406 / 648 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
02.08.2013, 00:42
Ну, можно, конечно отдефайнить, но лучше потом код выкинуть
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
02.08.2013, 01:14
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
// [ example.h ]
class Example {
# * include "example.cpp";
};
// [ example.cpp ]
Example()
{
* * //...
}
И что? так работает?
даже сказать сложно что за ошибка вылетит, но я уверен, что это не сработает!
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
02.08.2013, 01:19
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
но я уверен, что это не сработает!
Почему? Получится определение класса прямо в объявлении
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
02.08.2013, 01:30
Цитата Сообщение от Croessmah Посмотреть сообщение
Сообщение от Kuzia domovenok
но я уверен, что это не сработает!
Почему? Получится определение класса прямо в объявлении
Для использования класса, Example.h инклюдится в main.cpp. Туда же в соотв. место инклюдится Example.cpp. В результате после препроцессора получается
C++
1
2
3
4
5
6
7
8
9
class Example {
  Example()
  {
  //...
  }
}
int main(){
 Example ex;
//...
Длинный это имел в виду? Но Ведь остаётся файл Example.cpp, который тоже скармливается компилятору, но не компилируется, т.к.
C++
1
2
3
4
  Example()
  {
  //...
  }
это некомпилируемо.
1
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
02.08.2013, 01:39
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Длинный это имел в виду? Но Ведь остаётся файл Example.cpp, который тоже скармливается компилятору, но не компилируется, т.к.
C++
1
2
3
4
  Example()
  {
  //...
  }
это некомпилируемо.
Смотря где и смотря что там написано. Технически, можно написать функции так, чтобы они скомпилировались. Но вообще этот файл, естественно, не должен компилироваться самостоятельно.

Не по теме:

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

0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
02.08.2013, 01:46
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Смотря где и смотря что там написано. Технически, можно написать функции так, чтобы они скомпилировались. Но вообще этот файл, естественно, не должен компилироваться самостоятельно.
Тогда ты меня просто сбил с толку названием файла. Обычно, файлы предназначенные для #incлуда имеют расширение h, а файлы, которые планируется компилировать cpp
Если файл не планируется кормить компилятору, тем более если в нём сам по себе не компилируемый код,
зачем давать ему расширение *.cpp ?
м?
0
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690
02.08.2013, 10:27  [ТС]
Спасибо всем за предложения. Ну нафиг, лучше буду Example:: писать
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.08.2013, 12:23
Цитата Сообщение от Nikitko_Cent Посмотреть сообщение
можно ли при реализации класса избавиться от постоянного указания имени класса?
А если в *.cpp файле будут еще и другие классы, с функцией, имя которой Example? Без указания :: поэтому не обойтись.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.08.2013, 12:23
Помогаю со студенческими работами здесь

Как использовать имя класса, переданное в виде строки
Задание: Не прошу его решать за меня. Просто мне непонятно, зачем хранить соответствие между именем класса и командой в xml файле. Ну...

Передать имя загруженного файла и использовать его
Доброго времени суток, уважаемые форумчане! if(is_uploaded_file($_FILES)) { move_uploaded_file($_FILES, " /путь...

Разъясните синтаксис - имя класса при передаче аргументов методу класса
Здравствуйте. Несколько раз столкнулся с нижеследующим кодом классов. 1. При разборе роутера FastRoute: $dispatcher =...

Ошибка при попытке использовать объект класса в определении другого класса
Муторное название получилось :scratch: Прошу помощи.... есть созданный класс работы со строкой: "MyString.h" class...

Возможно ли как-то, зная имя класса, вернуть в каком-либо методе имя класса?
Добрый день! Интересуюсь. Есть Обобщенный метод, например: Add<T>(string nameElement). Какой конкретно Т определяется...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru