57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129
1

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

12.01.2016, 20:14. Показов 357. Ответов 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;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2016, 20:14
Ответы с готовыми решениями:

Вызов динамического метода класса по указателю на объект класса
Как это можно сделать? И хотелось бы как можно проще.

Указатель метода класса в другом методе этого класса
Здравствуйте. Как можно передать в методе класса указатель на другой метод этого же класса....

Указатель на метод класса в качестве аргумента метода класса
Функция _createFun вызывается для создания ХХХ в основном классе. Но вот потребовалось создать ХХХ...

Не удается обратиться к свойству класса из метода класса
Пишу хедер для работы с файлами такой структуры: nametype1 name1 name2 name3 name4 ...

1
335 / 183 / 80
Регистрация: 22.08.2013
Сообщений: 724
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)
{
Миниатюры
Не удается запустить указатель метода по указателю класса  
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2016, 11:00
Помогаю со студенческими работами здесь

Не удается разыменовать указатель на объект класса
Добрый день, знатоки c++. Пишу программу, уровень знаний базовый. Нуждаюсь в совете профессионалов....

Вызов метода класса через указатель на ноль
Почему в таком коде не происходит ошибка при вызове метода класса, а уже только в самом методе:...

C_str() для метода класса возвращает пустой указатель
Есть некий класс, с методом getValue(), который возвращает std::string снаружи я вызываю...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru