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

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

Восстановить пароль Регистрация
 
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
17.05.2013, 20:08     ошибка с полиморфизмом: программа не понимает, что нужно обращаться к наследуемой функции #1
Нужно организовать класс стек посредством связной очереди
соответственно, абстрактный базовый класс и два производных: для 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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2013, 20:08     ошибка с полиморфизмом: программа не понимает, что нужно обращаться к наследуемой функции
Посмотрите здесь:

Ошибка в коде или компилятор не понимает меня? C++
Нужно что бы программа выводила время, затраченое на выполнение. C++
C++ С++ Код Цезаря(программа выводит не то что нужно)
Нужно вставить блок на асме, но он не понимает asm и __asm C++
нужно что б программа читала не с клавиатуры а из файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
17.05.2013, 20:11     ошибка с полиморфизмом: программа не понимает, что нужно обращаться к наследуемой функции #2
Сделайте вывод чего-нибудь в деструкторе и станет ясно где ошибка (тонко намекаю: main.cpp:14-15).
_Xan_
 Аватар для _Xan_
20 / 20 / 6
Регистрация: 19.09.2010
Сообщений: 85
17.05.2013, 20:13     ошибка с полиморфизмом: программа не понимает, что нужно обращаться к наследуемой функции #3
Может я чего-то не понимаю, но почему вы не используете шаблонные классы?
0x10
17.05.2013, 20:18
  #4

Не по теме:

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

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

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

Текущее время: 18:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru