Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
7 / 7 / 2
Регистрация: 21.02.2019
Сообщений: 134

Получить значение поля класс A объектом, инкапсулированным в класс A

30.07.2019, 12:13. Показов 2786. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток.
Подскажите, есть ли способ получить значение поля класса в объекте, который самый является полем этого класса.
Для примера:
вот такая программка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
class Slave{
    public:
    int num;
    string name;
    
    Slave(string _name, int _number) : name(_name), num(_number){}
    
    void presentHimself(){
        cout << "My name is " << this->name << " my num is " << this->num << ". I belong to:" << endl;
    }
};
 
class Owner{
    private:
        int countOfSlaves;
    public:     
        vector<Slave*> mySlaves;
        string Name;
        Owner(int a, string _name) : Name (_name){
            for (int i=0; i < a; i++){
                string _name;
                _name.push_back(char(i+100));
                Slave *currentSlave = new Slave(_name, i+1);
                mySlaves.push_back(currentSlave);
            }
            countOfSlaves = a;
        }   
        
        void mySlavesAre(){
            for (int i=0; i<countOfSlaves; i++){
                mySlaves[i]->presentHimself();
            }
        }       
};
 
int main(){
    Owner mrThomas(5, "Mr. Thomas: ");
    mrThomas.mySlavesAre();
    system("pause");
    return 0;
}
В классе Owner есть поле Name и вектор объектов класса Slave. Может ли как-то объект класса Slave, будучи помещенным в качестве поля класса Owner определить этот факт и получить значение поля Name того объекта в который он помещен?
Или без введения доп поля в классе Slave, куда будет записываться значение владельца, (например полученное в качестве параметра конструктора) не обойтись.
Грубо говоря: рабу надо всегда говорить: "Ты раб такого-то хозяина", что бы он это знал. Или же у раба есть возможность спросить: "Эй, хозяин, а как тебя зовут?".
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.07.2019, 12:13
Ответы с готовыми решениями:

Класс: Создать класс, объектом которого будет являться двумерный массив размерностью n x m.
Нужно создать класс, объектом которого будет являться двумерный массив размерностью n x m. Массив должен размещаться в динамической памяти....

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени?
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { friend class diagonal; ...

Как сделать чтобы класс возвращал значение своего поля?
Возможно я не верно выразился, есть класс: class Monstr { String name; int ammo; }; как сделать чтобы при: Monstr...

1
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
30.07.2019, 12:52
Простейшим способом - вот так, с предварительным объявлением класса, хранением указателя на него, и реализации функции опроса Slave уже после определения владельца.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
class Owner;
 
class Slave{
    public:
    int num;
    string name;
    Owner *p_owner;
    
    Slave(string _name, int _number, Owner *_owner) : name(_name), num(_number), p_owner(_owner) {}
    
    void presentHimself();
};
 
class Owner{
    private:
        int countOfSlaves;
    public:     
        vector<Slave*> mySlaves;
        string Name;
        Owner(int a, string _name) : Name (_name){
            for (int i=0; i < a; i++){
                string _name;
                _name.push_back(char(i+100));
                Slave *currentSlave = new Slave(_name, i+1, this);
                mySlaves.push_back(currentSlave);
            }
            countOfSlaves = a;
        }   
        
        void mySlavesAre(){
            for (int i=0; i<countOfSlaves; i++){
                mySlaves[i]->presentHimself();
            }
        }       
};
 
void Slave::presentHimself(){
        cout << "My name is " << name << " my num is " << num << ". I belong to:" << p_owner->Name << endl;
}
 
 
int main(){
    Owner mrThomas(5, "Mr. Thomas: ");
    mrThomas.mySlavesAre();
    system("pause");
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.07.2019, 12:52
Помогаю со студенческими работами здесь

Реализовать класс ModelWindow, добавив поле для курсора, используя для представления поля класс Cursor
Реализовать класс ModelWindow, добавив поле для курсора. Используйте для представления поля класс Cursor. (это под типом класс в классе).

Управление объектом наследника через базовый класс
Даны два класса. Класс A - базовый класс, B - класс наследник. В классе А 3 поля, в наследнике - еще 2. Указателю на класс A присвоим...

Класс таблиц баз данных и класс записей в таблице(реляционная таблица). Предусмотреть класс связей между таблицами
Здравствуйте! Никак не могу продумать структуру этой программы. Проходим наследование, но я все равно не знаю, как его здесь применить. Как...

Класс: Разработать абстрактный класс класс Point для задания координаты...
Всем привет, помогите пожалуйста решить задачу, я уже всю голову сломал, не знаю как решить... Разработать абстрактный класс класс...

Отдельно класс данных, класс формул и главный класс
Здравствуйте! У меня есть три вопроса. Первый вопрос. Скажите пожалуйста! Правильный ли это подход к созданию приложений :...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru