Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для MolodoyCoder
36 / 15 / 2
Регистрация: 02.09.2013
Сообщений: 565

Как это объяснить правильными словами ? В заголовочном файле я могу

23.12.2013, 14:14. Показов 1869. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как грамотно описать словами следующий прием:
myclassB.h

C++ (Qt)
1
2
3
4
5
6
7
private:
 
 MyClassA *t = new MyClassA();
   
 QLocale *e = new QLocale(QLocale::Russian);
//  и т.д. 
// private/public - в данном случае не суть важно
А в реализации myclassB.cpp
я работаю так:
C++ (Qt)
1
2
t->myfunc(some1,some2);
data=e->toString(mysomedata);
тут происходит создание объекта путем записи в заголовочном файле ?
или заголовочный файл содержит декларирование о создании объекта, который будет являться полем верхнего класса ?
Т.е. оно работает конечно. Но мне бы хотелось правильно понять что происходит. а не делать вслепую.

Также я пробовал тупо делать прямо в файле реализации до развертывания методов сверху, без декларирования
в заголовочном файле:

myclassB.cpp

C++ (Qt)
1
2
3
4
5
6
7
 MyClassA *t = new MyClassA();
   
 QLocale *e = new QLocale(QLocale::Russian);
 
using namespace std;
int MyClassB::some()
{
и так работает! Без декларирования! Но в таком варианте вообще трудно это объяснить!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.12.2013, 14:14
Ответы с готовыми решениями:

Как правильно объяснить это словами if (!(i & 1))
Как правильно объяснить это словами if (!(i & 1))!

определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер?
Сабж, а подробнее если в заголовочном файле hider.h описана функция, допустим так: void f (); void f () { int per= 10; } ...

Не могу объеявить экземпляр класса в заголовочном файле (qt, gcc)
Всем привет. Проблема состоит в следующем. Есть два класса - rule_class_common и rule_class_back. В rule_class_back...

7
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
23.12.2013, 14:31
Цитата Сообщение от MolodoyCoder Посмотреть сообщение
private:
MyClassA *t = new MyClassA();
Во-первых:
warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
Во-вторых:
Содержимое хедера при компиляции вставляется в файл в котором он используется.

В первом случае вы создаете объект внутри другого класса, во втором - глобально.
1
 Аватар для MolodoyCoder
36 / 15 / 2
Регистрация: 02.09.2013
Сообщений: 565
23.12.2013, 14:54  [ТС]
Цитата Сообщение от RazrFalcon Посмотреть сообщение
В первом случае вы создаете объект внутри другого класса
Понятно. Кратко и ясно.
А так делать нормально ? А то, читаю литературу, бывают места встречаются, в стиле "Так можно,компилятор не ругнется, но так никогда не делайте... и т.д"

Цитата Сообщение от RazrFalcon Посмотреть сообщение
во втором - глобально.
Вопрос, аналогичный, предыдущему.

Цитата Сообщение от RazrFalcon Посмотреть сообщение
: in-class initialization of non-static data member is a C++11 extension
Ну и что такого , что это позволительно, благодаря расширению C++ до стандарта C++11 ???
Почему Warning ? (Внимание) ? Может это опасно ? Я начитался статей про "выстрел себе в ногу"
0
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
23.12.2013, 15:03
Цитата Сообщение от MolodoyCoder Посмотреть сообщение
А так делать нормально ?
Не очень. По крайней мере для тех кто не использует С++11.
Цитата Сообщение от MolodoyCoder Посмотреть сообщение
Вопрос, аналогичный, предыдущему.
Зависит от задачи, но в общем это дурной тон. От глобальных переменных в C++ лучше держаться подальше.
Цитата Сообщение от MolodoyCoder Посмотреть сообщение
Ну и что такого , что это позволительно, благодаря расширению C++ до стандарта C++11 ???
Не все компиляторы могут нормально такой код скомпилировать.
1
 Аватар для MolodoyCoder
36 / 15 / 2
Регистрация: 02.09.2013
Сообщений: 565
23.12.2013, 15:09  [ТС]
О! Я вспомнил что меня с толку сбило. Я забыл написать еще 3-й вариант. Сорри!

Можно еще без заголовочного файла, но уже не глобально(как вы мне разобрали), а локально:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include<QMessageBox>
#include<QAction>
 
using namespace std;
 
MainWindow1::MainWindow1(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow1)
{    ui->setupUi(this);
     this->setWindowTitle("MachineToolCalc");
 
SomeClassA *a = new SomeClassA();
a-> // и т.д.
Теперь подведу итог:
Чем отличается локальное создание объекта в другом классе без декларации в h.файле и с декларацией ?
Видимостью ? Т.е. если я укажу создание объекта в заголовочном файле, я смогу везде его юзать по всему своему классу, в любом месте (внутри класса) ?
А если я не укажу создание объекта в заголовочном файле, и не укажу создание его глобально, то объект будет доступен только в члене того класса, где я его породил ?
0
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
23.12.2013, 15:26
Типа того. Только еще существует cast, через который можно забрать объект любого класса, в некоторых случаях.
1
 Аватар для MolodoyCoder
36 / 15 / 2
Регистрация: 02.09.2013
Сообщений: 565
23.12.2013, 18:11  [ТС]
RazrFalcon, спасибо.
Интересно ваше мнение...
Я учился давным давно в СТАНКИН. Факультет ИНТЕХ.
По своей натуре, и раздолбайству, я к кондингу пришел только 6 месяцев назад. На C# наваял, наполовину вслепую.
Работает. Работодатель пока вроде доволен. Решил освоить C++ Qt. И вот, я понимаю, что мне нужно более глубокое фундаментальное знание по кодингу. Пробелы вы и другие, помогаете мне устранять, не соврать, лучше чем преподы в СТАНКИНЕ. Там было совсем упрощенно. Я думал в МИРЭА или МАИ , или даже МЕХМАТ МГУ,будет круче. Но у меня брат в МИРЭА отучился.
На ИТ. Там он лишь отличался от моего станкина, тем что много кодили линейной алгебры + базовый ООП.
Скажите, а сейчас, в отличае от 90-х, учат лучше ? Или программер должен все-таки 90% базового сам расковыривать ?
Нас учили, не соврать, по слабее, чем ШИЛД, базовый курс.
А вообще, мне конечно стыдно, что на форуме люди задают по Qt C++ конкретные вопросы, а я все в фундаментализм лезу...
0
 Аватар для RazrFalcon
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
23.12.2013, 18:26
Ну правила-то не запрещают задавать абстрактные вопросы. Конкретные можно и в гугле найти.
О том как сейчас учат - ничего не могу сказать, у меня не компьютерное образование.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2013, 18:26
Помогаю со студенческими работами здесь

Как подключить библиотеки в заголовочном файле?
Для работы заголовочного файла (&quot;russianletters.h&quot;) необходимо дополнительно подключить библиотеки stdio.h и windows.h. В результате...

Как разместить 2 поиска в отдельном заголовочном файле
Как разместить 2 поиска в отдельном заголовочном файле?? Создать файл содержащий сведения о результатах охоты. Данные должны быть...

Как спрятать файл от декларации в главном заголовочном файле?
Всем салям, форумчане! Я делал dll библиотеку сортировок, куда включил две версии одной и той же сортировки MergeSort - одна,...

Как использовать переменную типа string в заголовочном файле?
Есть файл cpp в котором объявлена переменная string head; Как мне использовать эту переменную в заголовочном файле?

Как завести вектор и структуру глобально в заголовочном файле или в чем ошибка
Создал заголовочный файл Globals.h. В нем объявляется структура и вектор из структур. #ifndef _Globals_ #define _Globals_ #include...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
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