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

указатели на элементы класса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Все положительные элементы двумерного массива записать в один одномерный массив, а остальные в другой http://www.cyberforum.ru/cpp-beginners/thread650273.html
Дан двумерный массив размером n на n заполнены целыми числами. все его положительные элементы записать в один одномерный массив а остальные в другой
C++ склеить 2 wav файла /* Написать программу, формирующую из двух WAV файлов третий путем конкатенации файлов. */ #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <Windows.h> typedef struct { http://www.cyberforum.ru/cpp-beginners/thread650271.html
опредилить общую стоимость C++
известны данные о мощности двигателей (в л.с.) и стоимость 30 легковых машин . определить общую стоимость автомобилей у которы больше 100 л.с
Как считывать данные из файла? C++
как считывать и записывать данные из файла по строкам в переменную?
C++ зачем ставить ";"(пустую инструкцию два раза) в цикле for http://www.cyberforum.ru/cpp-beginners/thread650256.html
for (i = 0; ; i++) Добавлено через 1 минуту одну убираешь прог не пашет. Пожалуйста подскажите
C++ прототип функции Использовать прототип функции То есть заголовок перед функцией main, а описание функции в теле функции main немогу с аргументами которые в скобках разобратся,куда что ставить чтобы работало(( #define MAX 1000 // Функция ввода строки с клавиатуры void getLine(char str, int m) { int c, i; подробнее

Показать сообщение отдельно
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
11.09.2012, 21:23     указатели на элементы класса
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
#include <iostream>
 
class Foo
{ 
public:
   void a() { std::cout << "Foo::a()" << std::endl; }
};
 
void invokeMember( Foo* foo, void( Foo::* ptr )() )
{
   (foo->*ptr)(); // Вызов метода по указателю на экземпляр класса и указателю на метод
}
 
int main()
{
   Foo foo;
 
 
   invokeMember( &foo, &Foo::a );
 
   void ( Foo::* ptr )() = &Foo::a;
   (foo.*ptr)(); // Вызов метода по указателю на экземпляре объекта
     
   return 0;
}
Указатель на метод в действительности является смещением относительно адреса начала класса. Поэтому тебе нужен экземпляр объекта (или указатель на него), к которому это смещение можно применить, чтобы найти нужный метод.
Можно посмотреть на это с другой стороны - любому методу экземпляра (то бишь нестатическому) неявно передается указатель на экземпляр (this), поэтому при отсутствии экземпляра тебе не достает одного параметра для передачи его методу.

Скобочки вокруг выражения типа (object.*memberPtr)() или (objectPtr->*memberPtr)() приходится ставить, чтобы разрешить неоднозначность в грамматике C++.
 
Текущее время: 13:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru