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

Не удается запустить указатель метода по указателю класса - C++

Восстановить пароль Регистрация
 
xlxndr
 Аватар для xlxndr
56 / 8 / 3
Регистрация: 14.06.2013
Сообщений: 115
12.01.2016, 20:14     Не удается запустить указатель метода по указателю класса #1
Первый класс - бесцветная (белая) линия,
Второй класс - цветная линия.
Если взять два указателя на данные классы и по ним указатель метода (он единственный - Draw()), то один класс рисуется, второй - не рисуется... Почему?...
Если поменять местами CL1 и CL2 (соответственно от CLB будет наследоваться не CL1, а CL2, а CL1 будет наследоваться от CL2), то тогда наоборот - рисуется цветная линия, а бесцетная не рисуется...

Классы описаны в файле:
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
//expclasses6.h
 
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <graphics.h>
#include <math.h>
using namespace std;
 
class CLB
{
protected:
        int ln;              //используется в CL1
        int c;              //используется в CL2
public:
        CLB()              {           }
        void Show()        {   Draw(); }
        virtual void Draw(){           }
};
 
class CL1: public CLB
{
public:
        CL1():CLB(){SetParam();}
        virtual void SetParam(int MaxL=800)
        {   ln=1+rand()%MaxL;    }
        virtual void Draw()
        {   line(100,ln,100+ln,ln);    }
};
 
class CL2: public CL1
{
 
public:
        CL2():CL1(){SetParam();}
        virtual void SetParam(int MaxL=800,int InitC=3)
        {   ln=1+rand()%MaxL;    c=InitC;   }
        virtual void Draw()
        {   setcolor(c); line(100,ln,100+ln,ln);   }
};
Программа в файле:

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
//main.cpp
 
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <graphics.h>
#include <math.h>
using namespace std;
#include "expclasses6.h"
 
typedef void (CLB::* CLBMethod)();
 
int main(int argc, char*argv[])
{
    srand(time(NULL));
    CL1 c1;
    CL2 c2;
    CLB* clink;                     //создаем указатель на базовый класс
    CLBMethod mlink = &CLB::Show;   //создаем указатель на метод базового класса
 
    initwindow(800,600);
    clink = &c1;                    //рисуем экземпляр первого класса
    (clink ->* mlink)();
 
    getch();                        //ощищаем экран по нажатию
    cleardevice();
 
    clink = &c2;                    //рисуем экземпляр второго класса
    (clink ->* mlink)();
 
    getch();
    closegraph();
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2016, 20:14     Не удается запустить указатель метода по указателю класса
Посмотрите здесь:

Почему не возвращается значение через указатель из метода класса? C++
C++ Как получить значение из метода класса, если метод возвращает указатель?
C++ Как лучше присвоить указателю на указатель адрес массива
C++ Не удается разыменовать указатель на объект класса
C++ Не удается обратиться к свойству класса из метода класса
C++ Доступ к указателю - элементу класса
C++ Вызов метода класса через указатель на ноль
C++ Привести указатель на класс к указателю на void

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nord_v
227 / 176 / 69
Регистрация: 22.08.2013
Сообщений: 723
13.01.2016, 11:00     Не удается запустить указатель метода по указателю класса #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от xlxndr Посмотреть сообщение
Почему?...
Цитата Сообщение от xlxndr Посмотреть сообщение
virtual void SetParam(int MaxL=800)
Цитата Сообщение от xlxndr Посмотреть сообщение
virtual void SetParam(int MaxL=800,int InitC=3)
Цитата Сообщение от xlxndr Посмотреть сообщение
initwindow(800,600);
Координата за пределы окна выходит (если не выходит, то рисует):
C++
1
2
3
4
virtual void SetParam(int MaxL = 590)
{
virtual void SetParam(int MaxL = 590, int InitC = 3)
{
Миниатюры
Не удается запустить указатель метода по указателю класса  
Yandex
Объявления
13.01.2016, 11:00     Не удается запустить указатель метода по указателю класса
Ответ Создать тему
Опции темы

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