Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452

Невидимый обьект

06.08.2015, 14:00. Показов 4594. Ответов 83
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго дня !

Играясь с С++ обнаружил такое явление, что обьект можно создать невидимым Ca();

Как теперь можно использовать этот обьект ?

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
#include <conio.h>
#include <stdio.h>
#include<iostream>
 
using namespace std;
 
class Ca
 
{
    int x;
 
public:
 
    Ca() : x(0) {printf("\nKONST x = %d this = %p\n",x,this);}
   ~Ca() {printf("\nDEST x = %d this = %p\n",x,this);}
    void operator () ()
    {printf("\nx = %d\n",++x);}
};
 
 
 
int main()
 
{
    Ca();
 
    getch();
 
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.08.2015, 14:00
Ответы с готовыми решениями:

невидимый курсор
Помогите реализовать невидимый курсор в консоли (он постоянно мигает и мешает). В интернете порылся, но так ничего нормально, работающего...

Обьект в try
Всем доброго дня ! Заметил одну неприятную вещь. Если обьект выходит за область try ограниченную фигурными скобками - то он...

Обьект в динамике
Всем привет ! Скажите пожалуйста , есть ли необходимость перем. х класса Miva ложить в динамическую память если обьект класса...

83
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
14.08.2015, 12:55  [ТС]
Студворк — интернет-сервис помощи студентам
тю блин.

как тогда работает это

C++
1
2
3
4
5
template <class T> 
void hjgh(T v)
{
    v(3438);
}
беру напрямую же устанавливаю тип Т как это делает компилятор.

C++
1
2
3
4
void hjgh(void(*)(const int&),v)
{
    v(3438);
}
если так

C++
1
2
3
4
void hjgh(void(*v)(const int&))
{
    v(3438);
}
, то куда делась запятая ?
0
2410 / 1942 / 764
Регистрация: 27.07.2012
Сообщений: 5,580
14.08.2015, 13:18
Цитата Сообщение от RAFA91 Посмотреть сообщение
то куда делась запятая ?
А зачем она тебе? Запятая разделяет разные аргументы в объявлении функции. Тебе, судя по всему нужен только один.
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
14.08.2015, 13:21  [ТС]
C++
1
2
3
4
5
6
void hjgh(void(*)(const int&) v)
{
    v(3438);
}
 
а если так ?
C++
1
void(*)(const int&)
это Т
0
2410 / 1942 / 764
Регистрация: 27.07.2012
Сообщений: 5,580
14.08.2015, 13:30
RAFA91, нет. Указатель на функцию объявляется так:
<возвращаемый тип> (*<имя_указателя>)(<типы аргументов функции>);

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
int func(int a, string s) { /*...*/ }
// ...
int (*ptr_func)(int, string) = func;
int result = ptr_func(20, "qwerty");
 
typedef int (*ptr_func_type)(int, string);
ptr_func_type ptr_func2 = func;
int result2 = ptr_func2(100500, "123456");
Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
void func_to_call_func(int (*ptr_func)(int, string))
{
    int result = ptr_func(123, "123");
}
 
void func_to_call_func2(ptr_func_type ptr_func)
{
    int result = ptr_func(123, "123");
}
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
14.08.2015, 14:04  [ТС]
Цитата Сообщение от John Prick Посмотреть сообщение
typedef int (*ptr_func_type)(int, string);

как я понял

C++
1
void func_to_call_func(int (*ptr_func)(int, string))
и

C++
1
void func_to_call_func(ptr_func_type  ptr_func)
это одно и то-же ?
0
2410 / 1942 / 764
Регистрация: 27.07.2012
Сообщений: 5,580
14.08.2015, 14:18
Цитата Сообщение от RAFA91 Посмотреть сообщение
это одно и то-же ?
Да.
1
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2226 / 1428 / 420
Регистрация: 16.05.2013
Сообщений: 3,651
Записей в блоге: 6
14.08.2015, 14:19
Yes
1
88 / 84 / 31
Регистрация: 18.11.2013
Сообщений: 390
14.08.2015, 21:09
может я и ошибаюсь, но ни конструкторы ни деструкторы не должны вызываться, потому что не было ни new ни delete
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
15.08.2015, 12:26  [ТС]
Всем доброго дня!

Решил написать указатель на шаблон функции.

Подскажите пожалуйста, в каком месте я допустил ошибки ?

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
#include <stdio.h>
#include <conio.h>
#include <iostream>
 
using namespace std;
 
template <class T1,class T2> void func_1(T1 x,T2 y);
template <class T1,class T2> typedef void (*Rada)(T1,T2);
template <class T1,class T2> void func_2(void (*)(T1,T2));
void func_3(Rada);
 
int main()
{
    func_2(func_1);
    func_3(func_1);
    getch();
    return 0;
}
 
template <class T1,class T2>
void func_1(T1 x,T2 y)
 
{
    cout << "\nx = "<< x <<" y = "<< y <<"\n";
}
 
template <class T1,class T2>
void func_2(void (*p)(T1,T2))
 
{
    p(444,'N');
}
 
void func_3(Rada p)
 
{
    p(444,'N');
}
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
15.08.2015, 12:37
Цитата Сообщение от RAFA91 Посмотреть сообщение
C++
1
template <class T1,class T2> typedef void (*Rada)(T1,T2);
этот typedef нужно либо завернуть в шаблонный класс/структуру либо заменить на using (С++11)

Добавлено через 2 минуты
Цитата Сообщение от RAFA91 Посмотреть сообщение
C++
1
void func_3(Rada);
окей, Rada шаблон, какие типы инстанцируем?
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
15.08.2015, 13:08  [ТС]
оставил только так.

что не так ?

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
#include <stdio.h>
#include <conio.h>
#include <iostream>
 
using namespace std;
 
template <class T1,class T2> void func_1(T1 x,T2 y);
 
template <class T1,class T2> void func_2(void (*)(T1,T2));
 
 
int main()
{
    func_2(func_1);
   
    getch();
    return 0;
}
 
template <class T1,class T2>
void func_1(T1 x,T2 y)
 
{
    cout << "\nx = "<< x <<" y = "<< y <<"\n";
}
 
template <class T1,class T2>
void func_2(void (*p)(T1,T2))
 
{
    p(444,'N');
}
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
15.08.2015, 13:38
Цитата Сообщение от RAFA91 Посмотреть сообщение
C++
1
func_2(func_1);
func_1 шаблон, какие типы инстанцируем?
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
15.08.2015, 14:02  [ТС]
Jupiter если Вы ведете к этому , то так тоже не работает .

C++
1
func_2(<int,char> func_1);
так тоже

C++
1
func_2(func_1 <int,char>);
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
15.08.2015, 14:31
http://ideone.com/7Cd7NF
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
15.08.2015, 15:09  [ТС]
ну , а почему у меня не фурычет это

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
#include <stdio.h>
#include <conio.h>
#include <iostream>
 
using namespace std;
 
template <class T1,class T2> void func_1(T1 x,T2 y);
 
//template <class T1,class T2>
 
//typedef void (*Rada)(T1,T2);
 
template <class T1,class T2> void func_2(void (*p)(T1,T2));
 
//void func_3(Rada);
 
 
int main()
{
    func_2(func_1<int, char>);
 
    //func_3(func_1);
 
    getch();
    
    return 0;
}
 
template <class T1,class T2>
 
void func_1(T1 x,T2 y)
 
{
    cout << "\nx = "<< x <<" y = "<< y <<"\n";
}
 
template <class T1,class T2>
 
void func_2(void (*p)(T1,T2))
 
{
    p(444,'N');
}
 
//void func_3(Rada p)
 
//{
//  p(444,'N');
//}
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
15.08.2015, 15:14
Цитата Сообщение от RAFA91 Посмотреть сообщение
ну , а почему у меня не фурычет это
ну а у меня не фурычит ваш conio.h и getch, другой компилятор, Карл!
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
15.08.2015, 15:28  [ТС]
как же заставить его работать в Microsoft Visual C++ 6.0

код то жиденький
0
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
15.08.2015, 19:22
Лучший ответ Сообщение было отмечено RAFA91 как решение

Решение

Цитата Сообщение от RAFA91 Посмотреть сообщение
как же заставить его работать в Microsoft Visual C++ 6.0
Боже ты мой. Я ж показывал выше - пост#35, строка 15.
Компилятор из VS 6 не проводит инстанцирование шаблонной функции, если мы только берем ее адрес (это баг).
Для того, чтобы заработало, нужно либо провести явное инстанцирование (как в моем примере), либо где-то все-таки вызвать ее по имени, причем с теми же типами аргументов.
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
16.08.2015, 12:06  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Боже ты мой. Я ж показывал выше - пост#35, строка 15.
так?

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
#include <stdio.h>
#include <conio.h>
#include <iostream>
 
using namespace std;
 
template <class T1,class T2> void func_1(T1 x,T2 y);
template <class T1,class T2> void func_2(void (*p)(T1,T2));
 
template void func_1<int,char>(int,char);
 
int main()
{
    func_2(func_1<int, char>);
    getch();
    return 0;
}
 
template <class T1,class T2>
void func_1(T1 x,T2 y)
 
{
    cout << "\nx = "<< x <<" y = "<< y <<"\n";
}
 
template <class T1,class T2>
void func_2(void (*p)(T1,T2))
 
{
    p(444,'N');
}
работает даже так
C++
1
template void func_1(int,char);
это нужно прописывать для всех возможных типов которые будут использоваться ?
0
19506 / 10109 / 2463
Регистрация: 30.01.2014
Сообщений: 17,833
16.08.2015, 14:47
Цитата Сообщение от RAFA91 Посмотреть сообщение
это нужно прописывать для всех возможных типов которые будут использоваться ?
Да, но только в том случае, если использование ограничивается взятием указателя на функцию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.08.2015, 14:47

Вывести обьект из контруктора
Описание &quot;В языке C++ оператор typeid возвращает ссылку на объект type_info, описывающий тип объекта, к которому принадлежит оператор...

Передать в конструктор обьект
Здравствуйте, такой вопрос, у меня есть класс , в котором есть связной список, и мне нужно при создании добавить этот же обьект в связной...

Класс, обьект, имя, enum..
Помогите написать программу, пожалуйста! ( Visual studio 2005, 2008 C++) Задача: Создать класс &quot;товар&quot;: название, наличие...

Абстрактные классы. Обьект в строку
Всем доброго вечера, существует следующяя ситуация.. Есть абстрактный класс в котором вирутальная функция,она должна преобразовывать...

Как вывести обьект с cout ?
Как вывести обьект с помощю cout ?


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
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, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru