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

Наследование и перегрузка методов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Картинка в виде двумерного массива пикселей http://www.cyberforum.ru/cpp-beginners/thread635226.html
Можно ли, засунув картинку в проект, получить её массив пикселей? Есть ли для этого какая-либо функция? Всё, что мне хочется, это взять картинку, формат которой предусматривает запись информации о пикселях последовательностями в 3 байта (без промежуточной информации) и засунуть туда лишний байт >:- E *хочу инфернальные картинки!!1* Добавлено через 3 часа 25 минут Есть идеи? ; (
C++ как исправить повреждением кучи Всем привет. Имеется такой кусок кода, который читает в условном формате дату из реестра и сохраняет её в структуру, где есть SYSTEMTIME: TCHAR * timeT=new TCHAR;//главные виновники, из-за низ вылетает в конце кода программа TCHAR * TempTimeT=new TCHAR; len=MAX_PATH; ZeroMemory(NUMBER, 15);//очищаем и создаем имя, по которому обратимся в реестр ZeroMemory(Name, 20);... http://www.cyberforum.ru/cpp-beginners/thread635204.html
C++ Сканирование экрана
Здравствуйте, нужна помощь новичку по winapi. Нужно сделать сканирование выбранной области экрана и запись результата в двумерный массив, где каждая ячейка это цвет в RGB. Делал через GetPixel, но это ужасно медленно. Читал про BitBlt но, к сожалению, не понял, как потом его в RGB переводить. Помогите пожалуйста, желательно с примером кодом. Спасибо. Добавлено через 1 час 3 минуты Уточню....
Площадь многоугольника C++
Необходимо вычислить площади двух многоугольников(ну а в дальнейшем проверить, лежит ли один из них в другом, пока мне это не надо) по известным вершинам. У меня получилось вот это."Это" не работает.Где ошибки? Заранее спасибо:) #include<iostream> #include<cstdlib> #include<cmath> using namespace std; float Ploshad(float x,float y, const int n); int main(){ int i,n1,n2; ...
C++ приоритет. странно http://www.cyberforum.ru/cpp-beginners/thread635171.html
привет всем прогерам С++ =) есть такой вопрос. Вроде ни чего сложного, но компилятор компилит это дело не так как ожидается. Есть такое предложение. IN = *block++ << 8; если указатель block ссылается на начало массива M M = {1,2,3,4,5,6,7,8,9,10}; То по таблице приоритетов сначала выполнится ++ затем * после << и только в конце будет =. В IN должно оказаться число 512:ireful:, НОоо...
C++ Перегрузка бинарной операции < Всем привет написал перегрузку для структуры: typedef struct t_FileInfo { t_String file_name; /*имя файла*/ t_String file_way; /*адрес к файлу*/ /*конструктор с параметрами*/ t_FileInfo(t_String fn = (""), t_String fw = ("")) : подробнее

Показать сообщение отдельно
moskitos80
 Аватар для moskitos80
39 / 39 / 0
Регистрация: 04.10.2011
Сообщений: 128
09.08.2012, 14:31     Наследование и перегрузка методов
Здравствуйте. Пытаюсь выполнить упр. 8 из главы 11 книги Р.Лафоре "ООП в С++", соорудил такое древо классов (картинка в конце поста). Если коротко, то я пыжился сотворить стек, который сможет принимать как символы, так и веществ. числа. Ничего лучше не придумал, как наследовать два класса. Вот выжимка из реализующего кода (За извращенца прошу меня не считать - я только начал изучать С++)

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
 
using namespace std;
////////////////////////////////////////////////////////////////////////////////
class Symbol
{
    protected :
        int sizeOf;
 
    public :
        Symbol(int size) : sizeOf (size)
        {/* empty */}
        virtual ~Symbol()
        {/* empty */}
};
////////////////////////////////////////////////////////////////////////////////
class Operator : virtual public Symbol
{
    protected :
        char *stack;
 
    public :
        Operator(int size) : Symbol(size)
        { /* ... */ }
        void push(char sym)
        { /* ... */ }
        char pop(void)
        { return '0';}
};
////////////////////////////////////////////////////////////////////////////////
class Number : virtual public Symbol
{
    protected :
        float *stack;
 
    public :
        Number(int size) : Symbol(size)
        { /* ... */ }
        void push(float num)
        { /* ... */ }
        float pop(void)
        { return 0.0f; }
};
////////////////////////////////////////////////////////////////////////////////
class Stack : public Operator, public Number
{
    public :
        Stack(int size) : Symbol(size), Operator(size), Number(size)
        {/* empty */}
};
////////////////////////////////////////////////////////////////////////////////
int main()
{
    Stack* stackPtr = new Stack(100); // error: request for member 'push' is ambiguous
 
    // Очень хотелось бы делать так:
    stackPtr->push('+');
    stackPtr->push(100);
 
    cout << endl;
    return 0;
}
И вот в конце, когда я пытаюсь создать объект производного класса, компилятор ругается на неоднозначность: error: request for member 'push' is ambiguous -я указал в листинге, где имено. Но позвольте, какая же неоднозначность? А как же разные типы данных в сигнатурах методов "push": Operator :: push(char), другой Number :: push(float), и я так подозреваю что с методами "pop" будет та же проблема (только там возвращаемые значения отличаются). Почему так - объясните пожалуйста новичку.

В UML я тоже не особо силён, но надеюсь схема понятна:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru