mr-ZA
@mr-ZA

Вопрос по синтаксису Qt?

Здравствуйте, объясните пожалуйста, имеется строки вида:

QLabel *label = new QLabel("Привет");
label-> show();

Я так понимаю что [*label] это указатель на адрес объектов которых в дальнейшем будет много наверное? Но почему там сразу название класса и строка ["Привет"]?

Допустим вот такой пример:

SomeClass a; //тут создается объект на основе класса
SomeClass *p = &a; //это указатель на адрес объекта чтобы через него // вызывать методы класса

p-> print("Привет")
  • Вопрос задан
  • 222 просмотра
Пригласить эксперта
Ответы на вопрос 2
axifive
@axifive
Software Engineer
QLabel *label = new QLabel("Привет");
Указателю присвается адресс нового объекта типа QLabel c текстом - "Привет"

SomeClass a это переменная типа SomeClass
SomeClass *p указатель на переменную типа SomeClass
Ответ написан
Комментировать
@poslannikD
Java/C/C++ Programmer
Это вопрос по синтаксису с++ )
QLabel *label = new QLabel("Привет");
label-> show();

давайте разберем построчно
1) QLabel("Привет"); - создали экзепмляр класса QLabel
2) new QLabel("Привет") - оператор new выделяет память в куче, размещает там объект
QLabel("Привет")
и возвращает указатель на адрес в куче. По этому адресу расположен наш объект
3) = new QLabel("Привет"); - оператор = выполняет присваивание(или инициализацию в зависимости от контекста). Присваивание(инициализация) чего ? Присваивание(инициализация) правого операнда. Присваивание(инициализация) чему? Присваивание(инициализация) левому операнду.
4) QLabel *label - объявили указатель, который может указывать на объекты класса QLabel.
5) QLabel *label = new QLabel("Привет"); -читаем с Права на лево создали объект, разместили его в куче, адрес объекта передали указателю типа QLabel который расположен слева от знака =
Я так понимаю что [*label] это указатель на адрес объектов которых в дальнейшем будет много наверное

Это указатель на адресс ОБЪЕКТА, этот указатель в один момент времени указывает только на ОДИН объект. так как отсутствует ключевое слово const то, да он может указывать на разные объекты. Но в конкретный момент времени он указывает только на один объект или вникуда

label-> show();
- обращаемся к объекту через УКАЗАТЕЛЬ на этот объект

SomeClass a; //тут создается объект на основе класса
SomeClass *p = &a; //это указатель на адрес объекта чтобы через него // вызывать методы класса

1) SomeClass a; - объект создается на СТЕКЕ, не рекомендуется создавать тяжеловесные объекты на стеке, а легковесные можно.
2)SomeClass *p = &a; - указатель указывает на объект на стеке все норм :)

Различие между
SomeClass a;
и
new QLabel("Привет");
в том что объект а существует на стеке, а QLabel("Привет"); в куче
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы