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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Используя метод "Решето Эратосфена" http://www.cyberforum.ru/cpp-beginners/thread868549.html
Помогите пожалуйста Используя метод "Решето Эратосфена", по заданному натуральному 7V>1 найти все простые числа, меньшие N.
C++ Зашифровать текст следующим образом: записать его в матрицу по строкам, а затем переписать по спирали от центра. Прочесть зашифрованный текст Помогите пожалуйста решить. Зашифровать текст следующим образом: записать его в матрицу по строкам, а затем переписать по спирали от центра. Прочесть зашифрованный текст. Распечатать те пары слов, расстояние между которыми наименьшее. http://www.cyberforum.ru/cpp-beginners/thread868547.html
Error: Перегрузка оператора вывода в поток, виртуальные методы C++
Ребят помогите плиз понять в чем дело. Почему возникает ошибка? В соответствии с моими ожиданиями объекты потомки класса transport (т.е Car и Truck) должны были неявно преобразоваться к классу transport. Error 2 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Car' (or there is no acceptable conversion) main.cpp 22 1 TestOverrideOutputStream ...
C++ В символьной строке определить количество и вывести все самые длинные слова
Дан символьный рядок.Слово - последовательность символов между пробелами, не содержащие пробелов внутри себя. Определить количество и вывести все самые длинные слова. Как сделать ето попроще в С++ Внимательнее выбирайте раздел.
C++ Рекурсивно описать функцию C(n,m) http://www.cyberforum.ru/cpp-beginners/thread868535.html
помогите написать код программы если можно. Рекурсивно описать функцию C(n,m), где 0≤m≤n, для вычисления биномиального коэффициента C_n^m по следующей формуле: C_n^0=C_n^n=1; C_n^m=C_(n-1)^m+C_(n-1)^(m-1) при 0<m<n. если кто сможет помочь но не поймет что написано то добавил вложение там понятней.Спасибо.
C++ Калькулятор (Обратная польская нотация) Здравствуйте, не могли бы Вы мне помочь в написании программы, получающей на вход строку (арифметическое выражение) и выводящей результат по вычислению значения этого выражения (строковый калькулятор). Калькулятор должен вычислять операции + , -, *, /, ^ (возвести в степень), также понимать функции min(), возвращающую значение наименьшего по значению аргумента (например min(1,4,7,9,3) должна... подробнее

Показать сообщение отдельно
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36

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

17.05.2013, 20:08. Просмотров 214. Ответов 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);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru