Форум программистов, компьютерный форум CyberForum.ru

Класс и указатель - C++

Восстановить пароль Регистрация
 
Divik
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 4
27.10.2013, 19:28     Класс и указатель #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
#include <iostream>
 
class Matrix
{
private:
    int arr[10][10];
 
public:
    void Set(int x, int y, int value)
    {
        arr[y][x] = value;
    }
};
 
 
 
 
int main()
{
    void (Matrix::*p)(int, int, int);
 
    p = &Matrix.Set;
 
    // Как здесь вызвать функцию Set из класса Matrix через указатель p?
 
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
27.10.2013, 19:34     Класс и указатель #2
C++
1
2
3
p = &Matrix::Set;    
Matrix m;
(m.*p)(1, 2, 3);
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
27.10.2013, 19:40     Класс и указатель #3
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
#include <iostream>
 
class Matrix
{
private:
    int arr[10][10];
 
public:
    void Set(int x, int y, int value)
    {
        arr[y][x] = value;
    }
};
 
 
 
 
int main()
{
    typedef void (Matrix::*p)(int, int, int);
 
    p = &Matrix::Set;
 
    // Как здесь вызвать функцию Set из класса Matrix через указатель p?
 
 
    return 0;
}
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
27.10.2013, 19:41     Класс и указатель #4
Функция, объявленная через указатель, вызывается как обычная функция. Главное её правильно объявить..
Divik
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 4
27.10.2013, 19:47  [ТС]     Класс и указатель #5
Цитата Сообщение от ct0r Посмотреть сообщение
C++
1
2
3
p = &Matrix::Set;    
Matrix m;
(m.*p)(1, 2, 3);
Спасибо! У меня оказывается ошибка была p = &Matrix.Set; Надо через двоеточие ::

Добавлено через 4 минуты
Цитата Сообщение от metaluga145 Посмотреть сообщение
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
#include <iostream>
 
class Matrix
{
private:
    int arr[10][10];
 
public:
    void Set(int x, int y, int value)
    {
        arr[y][x] = value;
    }
};
 
 
 
 
int main()
{
    typedef void (Matrix::*p)(int, int, int);
 
    p = &Matrix::Set;
 
    // Как здесь вызвать функцию Set из класса Matrix через указатель p?
 
 
    return 0;
}
Я не знаю что такое typedef (
henecs
 Аватар для henecs
16 / 16 / 0
Регистрация: 19.05.2013
Сообщений: 135
27.10.2013, 19:48     Класс и указатель #6
Цитата Сообщение от metaluga145 Посмотреть сообщение
typedef void (Matrix::*p)(int, int, int);
p = &Matrix.Set;
почему не сделать так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Matrix
{
private:
    int arr[10][10];
 
public:
    Matrix();
    void Set(int x, int y, int value)
    {
        arr[y][x] = value;
    }
};
Matrix::Matrix()
{
}
C++
1
2
Matrix *p = new Matrix();
p->set(x, y, value);
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
27.10.2013, 19:50     Класс и указатель #7
Цитата Сообщение от henecs Посмотреть сообщение
почему не сделать так?
Может потому, что это бред сивой кобылы!?
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
27.10.2013, 19:51     Класс и указатель #8
Цитата Сообщение от Divik Посмотреть сообщение
Я не знаю что такое typedef (
не выходя за пределы форума
henecs
 Аватар для henecs
16 / 16 / 0
Регистрация: 19.05.2013
Сообщений: 135
27.10.2013, 19:53     Класс и указатель #9
Цитата Сообщение от castaway Посмотреть сообщение
Может потому, что это бред сивой кобылы!?
можно подробнее или сслыки
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
27.10.2013, 19:53     Класс и указатель #10
Цитата Сообщение от Divik Посмотреть сообщение
Я не знаю что такое typedef (
Вводит имя, которое является синонимом типа.
C++
1
2
3
4
typedef void (Matrix::*p)(int, int, int);
p pf = &Matrix::Set;
Matrix m;
(m.*pf)(1, 2, 3);
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
27.10.2013, 19:54     Класс и указатель #11
Цитата Сообщение от henecs Посмотреть сообщение
можно подробнее или сслыки
ссылки
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
27.10.2013, 19:56     Класс и указатель #12
henecs, чет я вообще не понял Вашего кода. зачем там Matrix::Matrix?

Добавлено через 1 минуту

Не по теме:

капец, как забрать свое "спасибо"?

Divik
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 4
27.10.2013, 19:59  [ТС]     Класс и указатель #13
Цитата Сообщение от ct0r Посмотреть сообщение
Вводит имя, которое является синонимом типа.
C++
1
2
3
4
typedef void (Matrix::*p)(int, int, int);
p pf = &Matrix::Set;
Matrix m;
(m.*pf)(1, 2, 3);
Это получается что после вот этой строчки typedef void (Matrix::*p)(int, int, int);
p будет синоним на функцию?
ct0r
C++/Haskell
 Аватар для ct0r
1549 / 568 / 39
Регистрация: 19.08.2012
Сообщений: 1,174
Завершенные тесты: 1
27.10.2013, 20:02     Класс и указатель #14
Цитата Сообщение от Divik Посмотреть сообщение
p будет синоним на функцию?
На тип - указатель на функцию-член класса Matrix, которая принимает три числа типа int и возвращает void.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
27.10.2013, 20:03     Класс и указатель #15
Divik, на указатель функции
Divik
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 4
27.10.2013, 20:06  [ТС]     Класс и указатель #16
Хорошо мне помогли.) На этом пока хватит. С этими typedef еще почитаю в книге. А сейчас трудно разобраться.
Спасибо за помощь!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2013, 20:07     Класс и указатель
Еще ссылки по теме:

C++ Указатель на базовый класс и на производный
Указатель на шаблонный класс C++
C++ Обобщенный указатель на шаблонный класс

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

Или воспользуйтесь поиском по форуму:
metaluga145
27.10.2013, 20:07     Класс и указатель
  #17

Не по теме:

Divik, обращайтесь) рады помочь)

Yandex
Объявления
27.10.2013, 20:07     Класс и указатель
Ответ Создать тему
Опции темы

Текущее время: 03:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru