Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2019, 01:48   #1
Kim chen in
 
Регистрация: 02.03.2019
Сообщений: 8
По умолчанию Вопрос по синтаксису

Подскажите, что значит такая запись:
Код:
finished(QNetworkReply*)
(звездочка в конце)?
Kim chen in вне форума Ответить с цитированием
Старый 25.03.2019, 07:41   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Это значит, что идет речь про функцию finished, принимающую один аргумент типа QNetworkReply*.
p51x вне форума Ответить с цитированием
Старый 25.03.2019, 12:41   #3
Kim chen in
 
Регистрация: 02.03.2019
Сообщений: 8
По умолчанию

А в чем тогда разница
Код:
finished(QNetworkReply*)
и
Код:
startWs(QNetworkReply *reply)
?
Во втором случае принимается ссылка на готовый объект? А в каких случаях используется то или иное?
и еще чем отличается
Код:
QNetworkReply *reply =  new QNetworkReply
startWs(reply)
от
Код:
startWs(QNetworkReply *reply)

Последний раз редактировалось Kim chen in; 25.03.2019 в 12:47.
Kim chen in вне форума Ответить с цитированием
Старый 25.03.2019, 12:48   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

В каком контексте-то?

В первом просто нельзя обратиться к аргументу, если это определение функции.

И тут указатели, а не ссылки.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.03.2019, 12:51   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Цитата:
Сообщение от Kim chen in Посмотреть сообщение
А в чем тогда разница
Ни в чем. https://ideone.com/W09TMH Если конечно это не реализация функции и вам надо обратиться к параметру.

Цитата:
Сообщение от Kim chen in Посмотреть сообщение
Во втором случае принимается ссылка на готовый объект?
Нет. Ссылка это отдельное понятие в С++, не путайте.

Цитата:
Сообщение от Kim chen in Посмотреть сообщение
А в каких случаях используется то или иное?
Если вам не важно имя параметра, то без разницы. Например, компиляторы в ошибках зачастую пишут func(int, char*) без имен.
p51x вне форума Ответить с цитированием
Старый 25.03.2019, 13:02   #6
Kim chen in
 
Регистрация: 02.03.2019
Сообщений: 8
По умолчанию

Пардон, конечно указатель, перепутал.

определение
Код:
QNetworkAccessManager *manager = new QNetworkAccessManager(this);

void startWs(QNetworkReply *reply);
реализация
Код:
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(startWs(QNetworkReply*)));
void SocketIo::startWs(QNetworkReply *reply)
{
}

Последний раз редактировалось Kim chen in; 25.03.2019 в 13:05.
Kim chen in вне форума Ответить с цитированием
Старый 25.03.2019, 13:09   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Это не реализация, а использование типов в макросах https://doc.qt.io/qt-5/qobject.html#connect , где даже указано:
Цитата:
Note that the signal and slots parameters must not contain any variable names, only the type.
По сути это "указание указателей на функцию определенного типа". Вот в 5 они и решили избавляться от этих макросов https://wiki.qt.io/New_Signal_Slot_Syntax
p51x вне форума Ответить с цитированием
Старый 25.03.2019, 13:19   #8
Kim chen in
 
Регистрация: 02.03.2019
Сообщений: 8
По умолчанию

Я правильно понял что вот тут
Цитата:
void SocketIo::startWs(QNetworkReply *reply)
создается новый объект в памяти, и если есть несколько функций которые должны использовать этот объект
Код:
void SocketIo::startWs(QNetworkReply *reply)
void SocketIo::stopWs(QNetworkReply *reply)
то надо делать так
Код:
QNetworkReply *reply =  new QNetworkReply
startWs(reply)
stopWs(reply)
?
Kim chen in вне форума Ответить с цитированием
Старый 25.03.2019, 13:26   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Цитата:
Сообщение от Kim chen in Посмотреть сообщение
Я правильно понял что вот тут
Нет. Тут ничего не создается, это просто объявление функции, принимающей указатель. Вы вообще можете туда nullptr передать... упадет, конечно, но не в этом суть.

Цитата:
Сообщение от Kim chen in Посмотреть сообщение
то надо делать так
Как один из вариантов. Только чем это отличается в вашей голове от других параметров функции?..
p51x вне форума Ответить с цитированием
Старый 25.03.2019, 13:35   #10
Kim chen in
 
Регистрация: 02.03.2019
Сообщений: 8
По умолчанию

Пока ничем, я и пытаюсь разобраться.
пока не пойму даже в какой момент создается сам объект в памяти
Код:
void SocketIo::startWs(QNetworkReply *reply)
{
    QByteArray Data;
    Data=reply->readAll();
}
Kim chen in вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
asm для МК. Вопрос по синтаксису Sam Gold Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 25.02.2011 22:10
Вопрос по синтаксису Неофит Общие вопросы C/C++ 2 17.01.2011 20:04
Вопрос по Javascript синтаксису... DrStrangeLove JavaScript, Ajax 3 01.01.2011 20:16
Вопрос по синтаксису Brucebelg Microsoft Office Excel 3 28.05.2010 18:07
Вопрос по синтаксису SQL Rifler SQL, базы данных 0 01.01.2010 16:52