Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
1

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

17.05.2013, 20:08. Просмотров 252. Ответов 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
Ответы с готовыми решениями:

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

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

Что нужно поменять что бы программа меняла местами слова первое с последним второе с предпоследним и т.д?
program Project1; const D = ; var S, Sw : String; i, Len, Cnt,...

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

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

4
0x10
2577 / 1756 / 289
Регистрация: 24.11.2012
Сообщений: 4,387
17.05.2013, 20:11 2
Сделайте вывод чего-нибудь в деструкторе и станет ясно где ошибка (тонко намекаю: main.cpp:14-15).
0
_Xan_
20 / 20 / 14
Регистрация: 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
17.05.2013, 20:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2013, 20:22

Доработка программы, нужно что бы после того как юзер введет вместо числа что то другое вылезала ошибка
#include &lt;stdio.h&gt; #include &lt;windows.h&gt; int main(void) { ...

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

Программа выводит не то что нужно
Пытаюсь реализовать дешифрацию шифра Полибия. char alphavit = { ...


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

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

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