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

Чистые витруальные функции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Где находиться папка Source Files в MSVS 2010 http://www.cyberforum.ru/cpp-beginners/thread162180.html
Где находиться кнопка sources file? ( версия eng)
C++ Прочитать файл и отсортировать его по алфавиту Помогите пожалуйста сделать следующее задание: Есть текстовый файл input.txt, в нем есть несколько строк. Нужно прочитать этот файл, отсортировать строки по алфавиту и записать в файл output.txt. Было так (input.txt): tree apple cherry bush http://www.cyberforum.ru/cpp-beginners/thread162137.html
delete указателя C++
valueOfWordS - указатель, член класса String_value, конструктору же этого класса передается указатель на переменную того же типа: String_value::String_value(int* value_pointer) { valueOfWordS = 0; valueOfWordS = value_pointer; delete value_pointer; }
C++ Нужен совет в программе!
Програма такого типа: 1.Вивести в левый угол екрана компютера в столбик 5 слов разного цвета! 2.Обеспечить изменение цветах фона экрана при нажатии любой клавиши Вот первый пункт програмы: Код: #include<iostream.h> #include<conio.h> #include<stdio.h> void main() {
C++ Определение типа через typedef http://www.cyberforum.ru/cpp-beginners/thread162072.html
То-ли я пересидел, то-ли я просто этого не знаю, но все же. Через typedef определить 1) массив из 7 указателей на целые числа. Как не через тайпдеф знаю - int*arr; А вот как через него - хз... 2) указатель на массив из 7 указателей на целые числа. Полагаю что не через тайпдеф это будет как-то так: int**arr; 3) массив из 8 массивов по 7 указателей на целые. Ступор. На ум приходит только...
C++ Динамический массив Я постоянно работаю с динамическими массивами в Object Pascal и PHP. Вот внезапно возникла необходимость использования языка C++ и пришлось немного почесать голову )). :confused: Библиотека <vector> это конечно хорошо, но почему изменение длины массива не реализовано в стандартной библиотеке. А ведь C++ самый успешный и развивающийся язык программирования. Учитывая тот факт что в С++... подробнее

Показать сообщение отдельно
yanyk1n
 Аватар для yanyk1n
4324 / 1455 / 152
Регистрация: 12.03.2009
Сообщений: 5,310
28.08.2010, 20:59     Чистые витруальные функции
Доброго всем времени суток! В процессе изучения C++ натолкнулся на проблему касательно абстрактных классов и виртуальных функций. Вот исходный код:
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
#include <cstring>
 
using namespace std;
 
class Publication
{
    private:
        static const int LEN = 40;
        char name[LEN];
        float price;
    public:
        virtual void getData()
        {
            cout << "Введите название: ";
            cin.getline(name, LEN);
            cout << "Введите цену: ";
            cin >> price;
            cin.get();
        }
        virtual void display() const
        {
            cout << "Название: " << name << endl;
            cout << "Цена: " << price << endl;
        }
        virtual bool isOversize() = 0;// {return true;}
};
 
class Book: public Publication
{
    private:
        int pages;
    public:
        void getData()
        {
            Publication::getData();
            cout << "Введите количество страниц: ";
            cin >> pages;
            cin.get();
        }
        void display() const
        {
            Publication::display();
            cout << "Страниц: " << pages << endl;
        }
        bool isOversize() const
        {
            return (pages > 800 ? true : false);
        }
};
 
class Tape: public Publication
{
    private:
        int minutes;
    public:
        void getData()
        {
            Publication::getData();
            cout << "Введите продолжительность в минутах: ";
            cin >> minutes;
            cin.get();
        }
        void display() const
        {
            Publication::display();
            cout << "Продолжительность: " << minutes << " минут(ы)" << endl;
        }
        bool isOversize() const
        {
            return (minutes > 90 ? true : false);
        }
};
 
int main()
{
    Publication* array[100];
    int n = 0;
    char ch;
    do {
        cout << "Книга(b) или запись(t)? -> ";
        cin >> ch;
        cin.get();
        if (ch == 'b')
        {
            array[n] = new Book;
        } else
        {
            array[n] = new Tape;
        }
        array[n++]->getData();
        cout << "Продолжить ввод? (y/n) -> ";
        cin >> ch;
        cin.get();
    } while (ch == 'y');
    
    cout << endl << " === Данные === " << endl;
    
    for (int i = 0; i < n; i++)
    {
        array[i]->display();
        if (array[i]->isOversize())
        {
            cout << "Превышение размера!" << endl;
        }
        cout << endl;
    }
    return 0;
}
Где Publication - абстрактный класс, от кого происходят два других класса: Book и Type. С использованием указателей на базовый класс и употреблении виртуальных функций в getData() и display() проблем не возникло. Но как только я объявил isOversize() чистой виртуальной, то компилятор ругается на new Book и new Type, считая, что они так же являются абстрактными и создать объекты этих классов нельзя:

Код
86 G:\publcation.cpp
cannot allocate an object of type `Book'
86 G:\publcation.cpp
  because the following virtual functions are abstract:
26 G:\publcation.cpp
	virtual bool Publication::isOversize()
Хотя производные классы не используют эту функцию как таковую. Стоит изменить объявление isOversize() на
C++
1
virtual bool isOversize() {return true;}
как всё работает, но при этом можно создать объекты класса Publication.
В чём же моя ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru