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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Все положительные элементы двумерного массива записать в один одномерный массив, а остальные в другой http://www.cyberforum.ru/cpp-beginners/thread650273.html
Дан двумерный массив размером n на n заполнены целыми числами. все его положительные элементы записать в один одномерный массив а остальные в другой
C++ Склеить два 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; подробнее

Показать сообщение отдельно
Alberto_Timakov
1 / 1 / 0
Регистрация: 21.11.2011
Сообщений: 183

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

11.09.2012, 18:57. Просмотров 1771. Ответов 22
Метки (Все метки)

Здравствуйте!
есть код:

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
class A
{
    public:
    void C(void){return;}
        static int D(void){return 0;}
    int a;
        static int d;
};
 
int main(int argc, char** argv)
{
        A a_obj;
    int (A:: *p)= &A::a;// - работает
        //int *p= &a_obj.a; - не работает
        //int *p= &A::a; - не работает
        void (A::*f)(void)= &A::C; // - работает
        //void (*f)(void)= &A::C; - Не работает
        //void (*f)(void)= &a_obj.C; - Не работает
        int *e1= &a_obj.a;// - Работает
        int *e2= &A::a;// - Работает
        int (*F1)(void)= &A::D;// - работает
        int (*F2)(void)= &a_obj.D;// - работает
    system("Pause");
    return 0;
}
Знаю, что в не статическую функцию Неявно передается this, т.е. выходит вместо параметра (void), по сути параметр (this) в методе C и т.к. преобразование из в void (A::*)() в void * невозможно, то ошибка, а как тогда объяснить ошибку связанную со строкой :
C++
1
2
3
  
      //int *p= &a_obj.a; - не работает
        //int *p= &A::a; - не работает
в Т.А. Павловская "C/C++ прог. на яз. высокого уровня" пишут, что указатель на элемент класса в отличии от указателя на обычную переменную или функцию, ссылается не на определенный адрес памяти, а больше похож на индекс в массиве, т.к. задает смещение

Вот не могли бы вы поподробней рассказать про то что из себя этот указатель представляет,а то не очень понятно... и есть что-то, что позволяет достать адрес элемента класса, начинается по-моему на __co...и как-то связанно с __thiscall

И вообще для чего нужны эти указатели, что на методы класса, что на обычные функции?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru