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

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

Войти
Регистрация
Восстановить пароль
 
Nikitko_Cent
136 / 106 / 10
Регистрация: 27.10.2011
Сообщений: 661
Завершенные тесты: 2
#1

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

01.08.2013, 22:35. Просмотров 381. Ответов 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()
{
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2013, 22:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не использовать имя класса при его реализации (C++):

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

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

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

метод класса,как использовать его - C++
в классе есть функция как ее вызвать из главной функции?

Ошибка при использовании итератора в реализации класса - C++
На скрине всё понятно чо каво. Собственно, что я упустил? Что не дочитал? Проясните, пожалуйста. Из-за медленного интернета не могу...

Ошибка компиляции при реализации класса-шаблона - C++
Не могу понять почему компилятор ругается. Помогите разобраться. #include <iostream> using namespace std; template...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 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
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
02.08.2013, 00:42 #3
Ну, можно, конечно отдефайнить, но лучше потом код выкинуть
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,229
Записей в блоге: 3
Завершенные тесты: 1
02.08.2013, 01:19 #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
но я уверен, что это не сработает!
Почему? Получится определение класса прямо в объявлении
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
02.08.2013, 01:39 #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Длинный это имел в виду? Но Ведь остаётся файл Example.cpp, который тоже скармливается компилятору, но не компилируется, т.к.
C++
1
2
3
4
  Example()
  {
  //...
  }
это некомпилируемо.
Смотря где и смотря что там написано. Технически, можно написать функции так, чтобы они скомпилировались. Но вообще этот файл, естественно, не должен компилироваться самостоятельно.

Не по теме:

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

Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
02.08.2013, 01:46 #8
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Смотря где и смотря что там написано. Технически, можно написать функции так, чтобы они скомпилировались. Но вообще этот файл, естественно, не должен компилироваться самостоятельно.
Тогда ты меня просто сбил с толку названием файла. Обычно, файлы предназначенные для #incлуда имеют расширение h, а файлы, которые планируется компилировать cpp
Если файл не планируется кормить компилятору, тем более если в нём сам по себе не компилируемый код,
зачем давать ему расширение *.cpp ?
м?
Nikitko_Cent
136 / 106 / 10
Регистрация: 27.10.2011
Сообщений: 661
Завершенные тесты: 2
02.08.2013, 10:27  [ТС] #9
Спасибо всем за предложения. Ну нафиг, лучше буду Example:: писать
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.08.2013, 12:23 #10
Цитата Сообщение от Nikitko_Cent Посмотреть сообщение
можно ли при реализации класса избавиться от постоянного указания имени класса?
А если в *.cpp файле будут еще и другие классы, с функцией, имя которой Example? Без указания :: поэтому не обойтись.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2013, 12:23
Привет! Вот еще темы с ответами:

Отделение интерфейса от реализации класса: компиляция кода реализации - C++
Доброго времени суток, У меня возникла проблема с отделением интерфейса от реализации класса. Допустим, у меня есть три файла: 1....

Ошибка при реализации класса, использующего шаблоннный тип. - C++
Пытаюсь реализовать шаблон Strategy в STR.h пишу template<class StrategyType> class Context { public: void Operation(); ...

Как сделать чтобы при создании массива его имя менялось? - C++
Вот есть такая функция: void UniqueCollection (int x1, int y1, int x2, int y2) { int Values = 4; int *Collection; Collection =...

Ошибки "Expression syntax" и "Unreachable code" при реализации класса матриц - C++
Подскажите по коду. #include <iostream.h> #include <math.h> #include <string.h> #include <stdio.h> #include <windows.h> ...


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

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

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