Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   * Теория * | C++ Доступ к членам класса через указатели (http://forum.oszone.net/showthread.php?t=69166)

Kincajou 30-07-2006 13:35 466295

* Теория * | C++ Доступ к членам класса через указатели
 
Есть такие классы:

class class1
{
class2 *object2;
};


class class3
{
class1 *object1;
};



в main-файле объявляется переменная класса class3:

class3 object3;

нужно получить доступ к переменной, на которую указывает пойнтер object2.
Тут вся проблема в том, что нужно получить доступ к переменной, на которую указывает указатель object2, на который в свою очередь указывает указатель из другого класса object1. Object3 - не указатель.

object3.object1->*object2 не работает,
object3.object1->(*object2) тоже, в обоих случаях говорит object2 undeclared.
Какой же синтаксис тут правильный будет?

Vlad Drakula 30-07-2006 13:47 466296

а где прописано что эти проперти класса punlick?

object3.object1->object2

Kincajou 30-07-2006 18:27 466343

Не понял вопрос :) Что такое punlick?

Но проблема решилась. Экспериментально установил, что правильный вариант записи:

*(object3.object1->object2)

Во как! ;)

Vlad Drakula 30-07-2006 20:20 466397

Kincajou
Цитата:

Не понял вопрос Что такое punlick?
publick

Цитата:

*(object3.object1->object2)

Во как!
object3.object1->object2->****
(*(object3.object1->object2)).****

Kincajou 30-07-2006 21:34 466435

Это еще варианты? А чем отличаются от моего?

Прописано в паблике, конечно. Можно про **** подробнее? Ни в одной эл. книжке не встречал такого.

Vlad Drakula 30-07-2006 21:47 466439

Kincajou
object3.object1->object2->имя_функции
(*(object3.object1->object2)).имя_функции
это синонимы... в данном случае.

Цитата:

Экспериментально установил, что правильный вариант записи:
нужно не эксперементально устанавливать а почитать книжку по C++ там про это на писано ;)

pva 30-07-2006 22:36 466457

Код:

class class2;

class class1
{
  class2* c2ptr;
};

скорее всего откомпилируется, но обращение *class1.c2ptr не получится, т.к. компилятор ещё не знает структуру class2 (придирка к первому посту)
Код:

class class2;

class class1
{
  class2* c2ptr;
};

class class2
{
  ...
}; // теперь всё нормально



Время: 16:15.

Время: 16:15.
© OSzone.net 2001-