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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
#1

ошибка с полиморфизмом: программа не понимает, что нужно обращаться к наследуемой функции - C++

17.05.2013, 20:08. Просмотров 223. Ответов 4
Метки нет (Все метки)

Нужно организовать класс стек посредством связной очереди
соответственно, абстрактный базовый класс и два производных: для int и double
в главной функции создается объект базового класса, а потом уже пользователь выбирает, какой тип данных ему нужен
соответственно, требуется, чтоб методы корректно работали, т.е. при вызове метода базового класса автоматически программа обращалась к методу производного класса
но это почему-то не происходит

class.h
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
#ifndef _LABA_2_3_
#define _LABA_2_3_
#include <iostream>
using namespace std;
class stack {
public:
    stack(){}
    virtual ~stack(){}
    virtual void push()=0;
    virtual void del()=0;
    virtual void pop()=0;
    virtual bool is_empty()=0;
};
class st_int:public stack {
    int inf;
    st_int *prev;
    st_int * top;
public:
    st_int(){top=NULL;}
    st_int(int a);
    ~st_int();
    void push();
    void del();
    void pop();
    bool is_empty();
};
class st_double:public stack {
    double inf;
    st_double *prev;
    st_double * top;
public:
    st_double(){top=NULL;}
    st_double(double a);
    ~st_double();
    void push();
    void del();
    void pop();
    bool is_empty();
};
#endif
main.cpp
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
#include "class.h"
void main () {
    setlocale(LC_ALL,".1251");
    int n;
    stack *p;
    cout<<"Если хотите работать с целыми числами, введите 1, иначе введите 2"<<endl;
    cin>>n;
    while (n!=1 && n!=2){
        cout<<"Вы должны ввести либо 1, либо 2. Попробуйте еще раз"<<endl;
        cin>>n;
    }
    if (n==1)
    {
        st_int a;
        p=&a;
    }
    else 
    {
        st_double b;
        p=&b;
    }
    do{
        cout<<"Нажмите: "<<endl;
        cout<<"1, если хотите добавить элемент в стек"<<endl;
        cout<<"2, если хотите посмотреть последний элемент стека (учтите, что после просмотра этот элемент уйдет из стека)"<<endl;
        cout<<"3, если хотите очистить стек"<<endl;
        cout<<"4, если хотите просмотреть все элементы стека (учтите, что стек после этого очистится)"<<endl;
        cout<<"5, если хотите выйти"<<endl;
        cin>>n;
        switch (n)
        {
        case 1:
            p->push();break;
        case 2:
            p->pop();
            cout<<endl;
            break;
        case 3:
            p->del();break;
        case 4:
            while (!p->is_empty()){
                p->pop();
                cout<<" ";
            }
            cout<<endl;
            break;
        case 5:return;
        default:
            cout<<"Вы должны ввести число от 1 до 4. Попробуйте еще раз"<<endl;
        }
    }
    while (true);
    return;
}
met_int.cpp
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
#include "class.h"
st_int::~st_int(){
    st_int * temp=top;
    while (top!=NULL){
        top=top->prev;
        delete temp;
        temp=top;
    }
}
st_int::st_int(const int a){
    st_int * temp=new st_int;
    temp->inf=a;
    temp->prev=NULL;
    top=temp;
}
void st_int::push()
{
    st_int * temp=new st_int;
    cout<<"Введите целое число"<<endl;
    cin>>temp->inf;
    if (top==NULL)
        temp->prev=NULL;
    else temp->prev=top;
    top=temp;
}
void st_int::del(){
    st_int *temp=top;
    while (top!=NULL){
        top=top->prev;
        delete temp;
        temp=top;
    }
}
void st_int::pop(){
    if (top==NULL)
        throw "Стек пуст";
    st_int *temp=top;
    cout<<temp->inf;
    top=top->prev;
    delete temp;
}
bool st_int::is_empty(){
    return(top==NULL);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2013, 20:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ошибка с полиморфизмом: программа не понимает, что нужно обращаться к наследуемой функции (C++):

парни нужно кое-что добавить (нужно что бы эта программа вычисляла среднее арифметическое чисел) - C++
нужно что бы эта программа вычисляла среднее арифметическое чисел, общую сумму, максимальное и минимальлное я сделала, буду очень...

Что это за ошибка, когда маткад не понимает, что такое у - MathCAD
Помогите плиз не понимаю что за ошибка маткад не понимает что такое у

Что нужно поменять что бы программа меняла местами слова первое с последним второе с предпоследним и т.д? - Pascal ABC
program Project1; const D = ; var S, Sw : String; i, Len, Cnt, CntMid : Integer; CntW, LenW, LenW1, P1, P2 : Integer; ...

Ошибка 678:удаленный компьютер не отвечает.что это?что нужно сделать чтобы работало? - Сети
ЧТО ЭТО?КАК С ЭТИМ БОРОТЬСЯ?

Нужно вставить блок на асме, но он не понимает asm и __asm - C++
VC понимает директиву __asm, я пишу в данное время под Linux c компилером g++ v.3.0 нужно вставить блок на асме... Но он не понимает...

Доработка программы, нужно что бы после того как юзер введет вместо числа что то другое вылезала ошибка - C (СИ)
#include &lt;stdio.h&gt; #include &lt;windows.h&gt; int main(void) { SetConsoleOutputCP(1251); char unit; float Celsius=0.0,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
0x10
2463 / 1635 / 238
Регистрация: 24.11.2012
Сообщений: 4,026
17.05.2013, 20:11 #2
Сделайте вывод чего-нибудь в деструкторе и станет ясно где ошибка (тонко намекаю: main.cpp:14-15).
0
_Xan_
20 / 20 / 6
Регистрация: 19.09.2010
Сообщений: 85
17.05.2013, 20:13 #3
Может я чего-то не понимаю, но почему вы не используете шаблонные классы?
0
0x10
17.05.2013, 20:18
  #4

Не по теме:

_Xan_, вероятно, задание такое. Сначала заставить использовать наследование, а потом показать, что на шаблонах проблема решается проще.

0
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
17.05.2013, 20:22  [ТС] #5
да, это действительно просто такая лабораторная) на самом деле цель этой лабораторной - заставить нас понять полиморфизм)

спасибо, ошибку нашла)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2013, 20:22
Привет! Вот еще темы с ответами:

Программа: почему человек меня не понимает? - Искусственный интеллект
Речь идет о разговорной программе. Программисты, которые пишут такие программы, стараются всю работу свалить на программу. А ведь можно...

Не понимает что был Timeout - Антивирусы
Kasperky после введения серийного нумера, при отключенном интернете никогда не может понять что соединения нет, соотв нет возможности...

Программа выводит не то что нужно - C#
Пытаюсь реализовать дешифрацию шифра Полибия. char alphavit = { {'А','Б', 'В', 'Г', 'Д','Е'}, ...

Программа выдает не то,что нужно - C++
Задача: Даны действительные числа а1,...,а60. Организовать новый массив из тех чисел, которые входят в последовательность более одного...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.05.2013, 20:22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru