Russian Qt Forum

Qt => Вопросы новичков => Тема начата: GPPsoft от Январь 23, 2014, 08:21



Название: Вопрос по ссылкам и указателям.
Отправлено: GPPsoft от Январь 23, 2014, 08:21
Здравствуйте. В C# привык передавать ссылки на объекты... Вообщем проблема такая. Нужно передать указатель или ссылку в функцию и присвоить "местной глобальной" переменной? Совсем запутался в этих указателях и ссылках. :( Спасибо.

Код:
Session *session;
..............................

void setSession(const Session *session)
{
     this.session=session;
}

void myFunc()
{
    session->тра_ля_ля...
}



Название: Re: Вопрос по ссылкам и указателям.
Отправлено: Swa от Январь 23, 2014, 09:12
По указателю:
Код:
void setSession(Session *s) {
     this.session=s;
}
По ссылке:
Код:
void setSession(Session& s) {
     this.session=&s;
}

Как вам удобнее.
Единственное отличие в том, что ссылку можно инициализировать только один раз.


Название: Re: Вопрос по ссылкам и указателям.
Отправлено: Igors от Январь 23, 2014, 09:26
А о каком языке идет речь? (т.к. this. в С++ нет)


Название: Re: Вопрос по ссылкам и указателям.
Отправлено: Swa от Январь 23, 2014, 09:37
Что значит нет? А куда он делся? Вы имеете в виду, что автор пропустил в реализации методов
Код:
Foo::
?


Название: Re: Вопрос по ссылкам и указателям.
Отправлено: LisandreL от Январь 23, 2014, 09:39
Что значит нет? А куда он делся? Вы имеете в виду, что автор пропустил в реализации методов
Код:
Foo::
?
И ещё не . а ->


Название: Re: Вопрос по ссылкам и указателям.
Отправлено: Swa от Январь 23, 2014, 09:45
И ещё не . а ->

Ага, сам на этом часто спотыкаюсь


Название: Re: Вопрос по ссылкам и указателям.
Отправлено: Igors от Январь 23, 2014, 09:53
Что значит нет? А куда он делся? Вы имеете в виду, что автор пропустил в реализации методов
Код:
Foo::
?
this-> есть, this. (с точкой) нет. Ну и если переменная объявлена вне класса, this не катит. Ладно, пример
Код
C++ (Qt)
const Session * theSession = 0;
 
void setSession( const Session * session )
{
    theSession = session;
}
Не запрещено, но плохо давать глобальной переменной рядовое имя как "session" и потом чего-то там крутить с this. Использовать this можно/нужно если есть неоднозначность в именах, но создавать ее искусственно ни к чему
Код
C++ (Qt)
void Foo::setSession( Session * session )
{
 this->session = session;  // class Foo имеет член session
}
 
Так можно, но для меня проще и лучше так
Код
C++ (Qt)
void Foo::setSession( Session * _session )
{
 session = _session;  // class Foo имеет член session
}