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

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

Восстановить пароль Регистрация
 
Nikitko_Cent
128 / 98 / 8
Регистрация: 27.10.2011
Сообщений: 627
Завершенные тесты: 2
01.08.2013, 22:35     Не использовать имя класса при его реализации #1
Из-за того, что не смог грамотно сформулировать свой вопрос, не нашел ничего в гугле
Поэтому объясню на примере:
Допустим, есть некий класс 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()
{
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2013, 22:35     Не использовать имя класса при его реализации
Посмотрите здесь:

C++ при перезагрузке оператора для класса не получается использовать имя переменной такое же,как в описании класса
метод класса,как использовать его C++
Отделение интерфейса от реализации класса: компиляция кода реализации C++
Ошибка при реализации класса, использующего шаблоннный тип. C++
Как сделать чтобы при создании массива его имя менялось? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
02.08.2013, 00:35     Не использовать имя класса при его реализации #2
Нормально — нет.

Технически — да:
C++
1
2
3
4
5
6
7
8
9
10
11
// [ example.h ]
class Example {
#   include "example.cpp";
};
 
 
// [ example.cpp ]
Example()
{
    //...
}
(этим и сотней других вырвиглазных способов + всякие макросы)
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
02.08.2013, 00:42     Не использовать имя класса при его реализации #3
Ну, можно, конечно отдефайнить, но лучше потом код выкинуть
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.08.2013, 01:14     Не использовать имя класса при его реализации #4
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
// [ example.h ]
class Example {
# * include "example.cpp";
};
// [ example.cpp ]
Example()
{
* * //...
}
И что? так работает?
даже сказать сложно что за ошибка вылетит, но я уверен, что это не сработает!
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
02.08.2013, 01:19     Не использовать имя класса при его реализации #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
но я уверен, что это не сработает!
Почему? Получится определение класса прямо в объявлении
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.08.2013, 01:30     Не использовать имя класса при его реализации #6
Цитата Сообщение от 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()
  {
  //...
  }
это некомпилируемо.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
02.08.2013, 01:39     Не использовать имя класса при его реализации #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Длинный это имел в виду? Но Ведь остаётся файл Example.cpp, который тоже скармливается компилятору, но не компилируется, т.к.
C++
1
2
3
4
  Example()
  {
  //...
  }
это некомпилируемо.
Смотря где и смотря что там написано. Технически, можно написать функции так, чтобы они скомпилировались. Но вообще этот файл, естественно, не должен компилироваться самостоятельно.

Не по теме:

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

Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.08.2013, 01:46     Не использовать имя класса при его реализации #8
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Смотря где и смотря что там написано. Технически, можно написать функции так, чтобы они скомпилировались. Но вообще этот файл, естественно, не должен компилироваться самостоятельно.
Тогда ты меня просто сбил с толку названием файла. Обычно, файлы предназначенные для #incлуда имеют расширение h, а файлы, которые планируется компилировать cpp
Если файл не планируется кормить компилятору, тем более если в нём сам по себе не компилируемый код,
зачем давать ему расширение *.cpp ?
м?
Nikitko_Cent
128 / 98 / 8
Регистрация: 27.10.2011
Сообщений: 627
Завершенные тесты: 2
02.08.2013, 10:27  [ТС]     Не использовать имя класса при его реализации #9
Спасибо всем за предложения. Ну нафиг, лучше буду Example:: писать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2013, 12:23     Не использовать имя класса при его реализации
Еще ссылки по теме:

C++ Ошибка при использовании итератора в реализации класса
C++ Отделение интерфейса класса от его реализации
C++ Объявление класса без его реализации

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.08.2013, 12:23     Не использовать имя класса при его реализации #10
Цитата Сообщение от Nikitko_Cent Посмотреть сообщение
можно ли при реализации класса избавиться от постоянного указания имени класса?
А если в *.cpp файле будут еще и другие классы, с функцией, имя которой Example? Без указания :: поэтому не обойтись.
Yandex
Объявления
02.08.2013, 12:23     Не использовать имя класса при его реализации
Ответ Создать тему
Опции темы

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