Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 08.05.2015
Сообщений: 19

Передача адреса класса в функцию

12.01.2018, 19:17. Показов 1768. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте
У меня такой вопрос, нигде не могу найти ответ: как сделать так, чтобы функция принимала адрес класса, или какой-то неопределенный тип, чтобы потом уже узнать адрес? Вот допустим код:

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
class V
{
private:
    double x1;
 
public:
    V(double ValueX1)
    {
        x1 = ValueX1;
    }
};
 
class L
{
public:
    void Add()
    {
        
    }
};
 
int main(void)
{
    V a1(3.0);
    L.Add(&a1);
}
Как вот адрес a1 передать в функцию Add класса L ? Подскажите пожалуйста.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2018, 19:17
Ответы с готовыми решениями:

Передача адреса функции в функцию (Класы)
Пример: // Общая функция increment void Test::IncBaseFunction ( void (Test::*IncFunct)() ) { // Как правильно передать и...

Передача адреса суммы двух чисел в функцию
#include <iostream> using namespace std; double MyF(double x) { x*=2; cout<<"Размер x: " <<sizeof(x)<<" Значение...

Передача объекта класса в функцию С++
Всем привет! Возник вопрос по классам. Допустим мне нужно изменить объект класса через функцию вызываемую в main. Я пробовал через...

25
1 / 1 / 0
Регистрация: 08.05.2015
Сообщений: 19
13.01.2018, 04:06  [ТС]
Студворк — интернет-сервис помощи студентам
TRam_, Спасибо.

Скажите пожалуйста, я себе уже весь мозг сломал) Вот у меня есть класс, вот такой допустим:
C++
1
2
3
4
5
class E
{
public:
 
};
могу я как-нибудь в него добавить указатель на другой класс?

Добавлено через 12 минут
Точнее мне надо там создать указатель, а в последствии присвоить ему какой-то класс, о котором он не знает заранее.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
13.01.2018, 04:25
Цитата Сообщение от Novohudonosor Посмотреть сообщение
могу я как-нибудь в него добавить указатель на другой класс?
Можешь, сделав объявление этого класса:

C++
1
2
3
4
5
6
7
class C;
 
class E
{
public:
     C *p_c;
};
Но для реализации функций, которые будут работать с объектом по этому указателю, нужно обязательно делать #include заголовочного файла, где реализован этот class C .

Добавлено через 9 минут
Цитата Сообщение от Novohudonosor Посмотреть сообщение
Точнее мне надо там создать указатель, а в последствии присвоить ему какой-то класс, о котором он не знает заранее.
А вот "переключаемого типа переменной", то это довольно не просто. Можешь почитать например тут - Реализовать класс var - «Универсальная переменная» - или в аналогичных темах.
1
1 / 1 / 0
Регистрация: 08.05.2015
Сообщений: 19
13.01.2018, 12:02  [ТС]
Цитата Сообщение от Novohudonosor Посмотреть сообщение
TRam_, Спасибо.

Скажите пожалуйста, я себе уже весь мозг сломал) Вот у меня есть класс, вот такой допустим:
C++
1
2
3
4
5
class E
{
public:
 
};
могу я как-нибудь в него добавить указатель на другой класс?

Добавлено через 12 минут
Точнее мне надо там создать указатель, а в последствии присвоить ему какой-то класс, о котором он не знает заранее.
Еще точнее мне надо в указатель добавить ссылку на объект класса.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
13.01.2018, 17:16
Цитата Сообщение от Novohudonosor Посмотреть сообщение
в указатель добавить ссылку на объект класса
так делать глупо.По-нормальному либо пользоваться объектом, либо указателем на объект, либо ссылкой.
0
1 / 1 / 0
Регистрация: 08.05.2015
Сообщений: 19
13.01.2018, 17:23  [ТС]
Почему глупо? А если я хочу создать список объектов класса и записывать туда сами эти объекты, чтобы через элементы этого списка я мог обращаться к методам этих объектов?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
13.01.2018, 17:55
Novohudonosor, если список, то тебе нужно только два указателя - указатель на следующий элемент и указатель на объект, и некий идентификатор, который бы показывал, какой из типов выбрать для работы с указателем на объект. Указатель на объект можешь использовать типа void *, а для работы использовать преобразование типа (reinterpret_cast<>). И после преобразования типа сможешь работать с абсолютно всеми методами этого объекта (используя -> ), отдельно их подключать не нужно.

Но чтобы сделать преобразование "к тому объекту который там был", можешь использовать switch(<идентификатора>), а в case'ах - соответственно вызов преобразования типа указателя и вызов функции соответствующего типа. Естественно такие вызовы для каждого из типов придётся писать явно, т.к. только ты можешь определить соответствие между идентификатором и типом данных. Частично это теоретически можно автоматизировать, вызывая после преобразования шаблонную функцию (которая привяжется к типу, к которому ты преобразовал указатель), но всё равно case для типа должен быть свой собственный.

Добавлено через 4 минуты
Указатели на методы класса существуют, но их можно примять исключительно к объектам только этого класса. Поэтому если тебе для одного и того же объекта нужно переключаться между однотипными функциями foo1(), foo2(), foo3() и т.д., то тут указатели на методы тебе помогут (ну например собрать эти указатели на методы в массив, и вызывать функцию например как (obj.*foo_arr[i])(); ). А в том случае который описываешь - они вообще никак тебе не помогут.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.01.2018, 17:55

Передача в функцию метод класса
Не получается передать в функцию метод класса... hge-&gt;System_SetState(HGE_FRAMEFUNC,&amp;GameManager::UpdateScene); ...

Передача private класса в функцию
Имеется класс class Computer { ... } и второй класс который наследует первый class NoteBook1 : private Computer {... } И...

Передача параметра в функцию класса
Здравствуйте. Столкнулся с проблемой. Почему переменная &quot;x&quot; не становится равна 25? #include &lt;iostream&gt; using namespace std; ...

Передача ссылки на обьект класса в функцию
Определен класс в хэддере: class List{ public: //... void Add(const List *list); //... Метод Add:

Передача параметров в дружественную функцию класса
Всем доброго времени суток. Читал про дружественные функции, в учебнике по которому учусь написано, что в дружественную функцию класса...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru