LINUX.ORG.RU

Класс в объекте


0

0

Сразу извинияюсь за ,может быть не совсем точную формулировку вопроса. Мне нужно сделать класс в объекте. Например : в Visual Basic'е (это просто пример) есть объект MyForm класса Form, есть объект MyButton, класса Button, но этот объект "принадлежит" объекту MyForm, то есть к нему есть доступ через MyForm.MyButton Как это сделать в Си++ (объект класса объекта :)). Другой пример, есть Вася класса человек, у него есть пальцы класса Палец, но объект этого класса "принадлежит" объекту Вася, и программист может создать сколько угодно объектов класса Палец, "принадлежащих" объекту Вася. Надеюсь понятно :)

anonymous

V dvuh strochkah esly pravil'no ponyal class Vasya{ class Pales{ }; };

anonymous
()

Не совсем. Class Chelovek { Class Pales {}; }; Но как сделать объект Mizinez класса Pales, объекта Vasya класса Человек :) ? Чтобы к нему был доступ как Vasya.Miziniez

anonymous
()

:) V dannom sluchaye class Chelovek{ class Palez{}; class Palez mezines; class Palez bol'shoy; } :)))))))))))))))))))

anonymous
()

Извините, но или я вас не понимаю или вы меня. Ну объявлю я так классы, но дальше то что, объявляем Васю - Chelovek Vasya; Объявляем палец Chelovek::Mizinez mizinez; но они будут сами по себе - к объекту mizinez - простой доступ через mizinez, а к объекту Vasya - через Vasya, а мне надо чтобы к объекту Vasya был именно такой доступ, но к объекту Mizinez был доступ через Vasya.mizinez.

anonymous
()

class chelovek{

public:

class palez{

public:

int i;

};

palez mizinez;

palez bolshoy;

};

Zdes' class palez yavlyaetsya podclasom chelovek (mozet bit' private togda problemi s dostupom), a OBECTI mizinez i bolshoy yavlyayutsya obyektami classa palez dostup (esli chelovek Vasya) Vasya.mizinez...

Imeem class chelovek imeyushiy class palez i ob'ekti v classe chelovek mizinez i bolshoy, dlya sokritiya palez mozcno obyavit' private a ob'ekti mizinez i bol'shoy kak public :) togda peregruzcay operatori v chelovek dlya dostupa k palez :) :) A mozcet i ne ponyal ya chego :( ne serdis'.....

anonymous
()

Ааааа. Я наконец понял что вы имели ввиду. Нет, мне нужно не совсем это, я хочу чтобы объект класса Pales можно было объявлять в программе а не в классе (палец это только пример, мне нужно создавать неопределенное количество таких объектов, а не 20 :)) например типа того Chelovek Vasya; Vasya::Pales mizinez ; Vasya.mizinez.function(); Прямо так сделать нелзя, это я уже выяснил, вот я хотел узнать - может по другому можно сделать. P.S.: Как я могу сердиться когда человек столько времени тратит на мои вопросы, если кому из нас сердится - так это вам, извините если напрягаю :)

anonymous
()

Используй подход C++ - учи STL !!!

// file.hpp
#include <vector>
#include <string>

class HumanPart
{
public:
string Name;
};

class Human
{
public:
typedef vector<HumanPart> TParts;
TParts parts;
};

// main.cpp
#include "file.hpp"

class Finger : HumanPart
{
};

int main(...)
{
Human Vasya;
Finger any_finger;

Vasya.parts.push_back(any_finger);
// так можно вставлять сколько угодно объектов любых классов?
// порожденных от HumanPart
...

Human::TParts::iterator i;
for(i = Vasya.parts.begin(); i != Vasya.parts.end(); ++i)
{ // делаем что хотим, (*i) == объекты, хранимые в векторе.
cout << (*i).Name << endl;
}

}

stormbringer
()

Da deystvitelno, esly hochesh dobavlyat object v programe pozcaluy luchshe vsego ispol'zovat' kakoy nibud' List ili Vector, esly budesh sohranyat' sam obyekt zcelatel'no opredelit' Copy Constructor. Horosho chto v conze razobralis' chto ti hotel. :) (Mozcesh napisat' svoy List)

anonymous
()

Боьшое спасибо всем. С помощью stl мне уже советовал сделать Just Me. Я думал что есть более правильный путь, но если три человека говорят так - значит будем делать так :) Еще раз большое спасибо.

anonymous
()

Какой-такой "более правильный" путь?! Для поддержки возможности создания STL Страуструп в свое время внес ряд изменений/добавлений в С++! STL является неот'емлемой частью стандарта С++.

stormbringer
()

Я этого не знал, я думал что STL - хоть и помогает, но сделан на всякий случай :) Теперь буду знать, спасибо.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.