Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по указателям и ссылкам / 13 сообщений из 13, страница 1 из 1
23.01.2014, 09:48
    #38535194
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по указателям и ссылкам
Здравствуйте. В C#,Java привык передавать ссылки на объекты... Вообщем проблема такая. Нужно передать указатель или ссылку в функцию и присвоить "местной глобальной" переменной? Совсем запутался в этих указателях и ссылках. :( Как сделать подобное на C++? Спасибо!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Session *session;
..............................

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

void myFunc()
{
    session->тра_ля_ля...
}
...
Рейтинг: 0 / 0
23.01.2014, 12:42
    #38535457
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по указателям и ссылкам
GorloPavel,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
const Session *session;

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

void myFunc()
{
    session->do_some();
}
...
Рейтинг: 0 / 0
23.01.2014, 15:56
    #38535728
Артем_84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по указателям и ссылкам
MasterZivGorloPavel,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
const Session *session;

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

void myFunc()
{
    session->do_some();
}
...
Рейтинг: 0 / 0
23.01.2014, 17:12
    #38535834
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по указателям и ссылкам
Артем_84,

И что, что const Session? Указатель-то не const.
...
Рейтинг: 0 / 0
23.01.2014, 17:45
    #38535881
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по указателям и ссылкам
У автора было:

Код: plaintext
1.
2.
Session *session;
void setSession(const Session *session);



Поскольку указатель на const нельзя присваивать указателю на НЕ-const, то я заменил
тип указателя, добавив туда const.

Код: plaintext
1.
2.
const Session *session;
void setSession(const Session *session);



Можно сделать изменение в обратную сторону:

Код: plaintext
1.
2.
3.
4.
5.
6.
Session *session;

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



Поскольку основная суть вопроса была, я считаю, не в этом, то я вообще не понимаю, что тут обсуждать.
...
Рейтинг: 0 / 0
23.01.2014, 18:12
    #38535919
Артем_84
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по указателям и ссылкам
Т.е. эту переменную можно изменить ?

Код: plaintext
1.
const Session *session;



жесть, а не язык...
...
Рейтинг: 0 / 0
23.01.2014, 18:31
    #38535941
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по указателям и ссылкам
Артем_84Т.е. эту переменную можно изменить ?

Код: plaintext
1.
const Session *session;





Да, эту переменную можно изменить.
Нельзя изменить то значение, на которое она указывает.

Ты что, совсем не знаешь ничего что ли ? Азы же.
...
Рейтинг: 0 / 0
23.01.2014, 21:09
    #38536083
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по указателям и ссылкам
MasterZivТы что, совсем не знаешь ничего что ли ? Азы же.
Когда это полное незнание обсуждаемой темы останавливало от бескомпромисных комментариев по ней :)
...
Рейтинг: 0 / 0
23.01.2014, 22:53
    #38536141
Артемкин  С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по указателям и ссылкам
MasterZivАртем_84Т.е. эту переменную можно изменить ?

Код: plaintext
1.
const Session *session;





Да, эту переменную можно изменить.
Нельзя изменить то значение, на которое она указывает.

Ты что, совсем не знаешь ничего что ли ? Азы же. именно этого не знал . спасибо
но ведь это както неоднозначно, Вам не кажется? константа != можно менять
...
Рейтинг: 0 / 0
23.01.2014, 23:04
    #38536148
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по указателям и ссылкам
Артемкин Сно ведь это както неоднозначно, Вам не кажется?
Нет.
Код: sql
1.
const Session * session;


и
Код: sql
1.
Session * const session;


- две большие разницы.
Код: sql
1.
const Session * const session;


это вообще отдельная песня.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.01.2014, 00:44
    #38536198
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по указателям и ссылкам
А именно:

Код: sql
1.
const Session * session;



Нельзя менять сам Session, а указатель на него (переменную session) -- можно.

Код: sql
1.
Session * const session = getSession();



Нельзя менять переменную session, нельзя этот указатель пересослать на другую Session, а сам Session можно менять.

Код: sql
1.
const Session * const session = getSession();



Нельзя менять ни сам Session, ни указатель на него (переменную session).

Код: sql
1.
Session * session;



Можно менять и сам Session, и указатель на него (переменную session).
...
Рейтинг: 0 / 0
24.01.2014, 16:45
    #38537172
Mad Pilot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по указателям и ссылкам
Непонятно только, что делали "ссылки" в исходном вопросе :)

А то ведь можно и так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class MyClass {
     Session *the_session;
public:
     // ...

     void SetSession(Session &sess)
     {
          the_session = &sess;
     }

     void MyFunc()
     {
          the_session->DoSomethingStupid();
     }
};



А для особых и истинных ценителей ещё и вот так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
class MyClass {
     Session &session;
public:
     MyClass(Session &sess) : session(sess) {}
     void MyFunc()
     {
          the_session->DoSomethingStupid();
     }
};


(но тут уж без конструктора никак, ибо ссылку присвоить нельзя, можно только ининциализировать)
...
Рейтинг: 0 / 0
24.01.2014, 18:53
    #38537336
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по указателям и ссылкам
Mad PilotА для особых и истинных ценителей ещё и вот так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
class MyClass {
     Session &session;
public:
     MyClass(Session &sess) : session(sess) {}
     void MyFunc()
     {
          the_session->DoSomethingStupid();
     }
};



(но тут уж без конструктора никак, ибо ссылку присвоить нельзя, можно только ининциализировать)
Я только так и делаю, потому что если у вас есть указатель, то через полгода кто-то обязательно забудет что его надо инициализировать, и все сломается в рантайме и в самый неподходящий момент.
А ссылка сломается уже при компиляции :)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вопрос по указателям и ссылкам / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]