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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Решение всех упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++" http://www.cyberforum.ru/cpp-beginners/thread1637144.html
Мне надо решение упражнений из книги Р. Лафоре "Объектно-ориентированное программирование в С++". Хотя бы какая-то часть
C++ Влияние абсолютного значения константы и использованных в ее изображении суффиксов L, U на тип данных Нужно проиллюстрировать влияние абсолютного значения константы и использованных в ее изображении суффиксов L, U на тип данных, который и присваивается на этапе компиляции. Программу я сам попробую написать, только объясните суть задачи или ход выполнения программы http://www.cyberforum.ru/cpp-beginners/thread1637132.html
Передача по ТСР C++
Всем привет, помогите начинающему, задача в том что бы с программы сервер передать текст из эдитов клиенту в лабелы, на данном этапе могу сделать что то локального чата, но это не то ((( Прошу прощения если сформулировал не правильно. Добавлено через 14 часов 30 минут Всем спасибо, сам решил.
Найти сумму указанных элементов в заданной матрице и количество столбцов, удовлетворяющих условию C++
Заполнить случайными числами матрицу размерностью NxM. Определить: 1-й вариант: Сумму положительных элементов в нечетных столбцах; Кол-во столбцов, содержащих хотя бы один нулевой элемент 2-й вариант:
C++ Как лучше построить механизм обработки ошибок на основе исключений? http://www.cyberforum.ru/cpp-beginners/thread1637103.html
Доброго дня! Я сейчас разрабатываю проект и хочу спросить: как лучше построить механизм обработки ошибок на основе исключений? Есть как минимум два варианта. 1) Создать иерархию классов исключений и выбрасывать для каждого типа ошибки свой объект одного из классов. 2) Создать один класс исключений в котором будет хранится код ошибки, сообщение и т.д., и выбрасывать исключение с...
C++ Переписать программу в соответствии с принципами написания хорошего кода, реализовать файловый ввод/вывод Имеется код. Нужно показывать на экзамене. У меня возникло несколько сложностей. Мне нужно его украсить, чтобы было видно хорошее программирование и функция открытия файла почему-то не работает, хотя вроде все сделал по уму. Помогите пожалуйста. #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <stdio.h> #include <stdlib.h> #include <string> #include <string.h> using namespace... подробнее

Показать сообщение отдельно
xlxndr
57 / 9 / 3
Регистрация: 14.06.2013
Сообщений: 115

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

12.01.2016, 20:14. Просмотров 173. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru