Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2011, 13:06   #1
Lazy maximka
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 29
Печаль Проблемы с перегрузкой в с++

Доброго времени суток. Собственно у меня следущая проблема. Создаю класс динамических одномерных массивов:
Код:
class massiv
{
public:
        massiv();
        massiv(int c);
        bool find(int number,int k);
        ~massiv();
        int getcount(){return count;};
        void output();
protected:
        int* mass;
        int count;
};
в нем есть функция вывода:
Код:
void massiv::output()
{
        for(int i=0;i<count;i++)
                cout<<mass[i]<<" ";
        cout<<"\n";
}
потом создаю класс наследник который создает массив вместе с его копией:
Код:
class copymassiv:public massiv
{
public:
        copymassiv();
        copymassiv(int c);
        ~copymassiv();
        void output(int);
private:
        int* copymass;
};
в котором функция вывода определена следующим образом:
Код:
void copymassiv::output(int)
{
        for(int i=0;i<count;i++)
                cout<<copymass[i]<<" ";
        cout<<"\n";
}
я так понимаю эта функция вывода будет перегружена, а функция вывода из предка наследуется, но почему то в функции main когда я делаю следующий вывод :
Код:
backup.output(1);
           backup.output();
компилятор ругается на backup.output(), она же должна наследоваться???
Lazy maximka вне форума Ответить с цитированием
Старый 30.10.2011, 14:57   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Как именно ругается, можно процитировать? Здесь люди привычные, в обморок не упадут.
Abstraction вне форума Ответить с цитированием
Старый 30.10.2011, 15:45   #3
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Код:
backup.massiv::output();
Она и наследуется, так будет работать
An1ka вне форума Ответить с цитированием
Старый 30.10.2011, 17:54   #4
Lazy maximka
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 29
По умолчанию

Цитата:
Сообщение от An1ka Посмотреть сообщение
Код:
backup.massiv::output();
Она и наследуется, так будет работать
Ну так то будет,но это же используется когда функция переопределена, но в моем то случае вроде как нет

ругается кстати вот так
Код:
 error C2660: copymassiv::output: функция не принимает 0 аргументов
Ну то есть как я сам понимаю все время вызывается именно функция наследника, но она же не переопределяет функцию потомка?

Последний раз редактировалось Lazy maximka; 30.10.2011 в 18:08.
Lazy maximka вне форума Ответить с цитированием
Старый 30.10.2011, 18:16   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код в одном файле или в нескольких? Заодно, как объявлена переменная backup?
Abstraction вне форума Ответить с цитированием
Старый 30.10.2011, 18:24   #6
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от Lazy maximka Посмотреть сообщение
Ну то есть как я сам понимаю все время вызывается именно функция наследника, но она же не переопределяет функцию потомка?
Если имя функции одинаковое, то получается, что она перекрывает область видимости. То есть нельзя сделать перегрузку функции, если эта функция в разных классах, без явного указания области видимости
Цитата:
Сообщение от Abstraction Посмотреть сообщение
Код в одном файле или в нескольких? Заодно, как объявлена переменная backup?
Да, в одном:
http://liveworkspace.org/code/4d42ef...81b156b1642ab9

Последний раз редактировалось An1ka; 30.10.2011 в 18:28. Причина: добавлено...
An1ka вне форума Ответить с цитированием
Старый 30.10.2011, 18:41   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Оп-паньки, действительно.
В объявление copymassiv надо добавить
Код:
using massiv::output();
Abstraction вне форума Ответить с цитированием
Старый 30.10.2011, 19:16   #8
Lazy maximka
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 29
По умолчанию

An1ka Спасибо, учту
Abstraction да, код в одном файле. А не подскажете куды именно это впихнуть?
Код:
using massiv::output();
Lazy maximka вне форума Ответить с цитированием
Старый 30.10.2011, 19:38   #9
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

В описание copymassiv, public-секцию. Пример.
Abstraction вне форума Ответить с цитированием
Старый 30.10.2011, 20:12   #10
Lazy maximka
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 29
По умолчанию

Благодарю
Lazy maximka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблемы с IE Tradua HTML и CSS 1 05.08.2011 06:54
Проблема с перегрузкой операторов в C++ StudentofSUSU Помощь студентам 2 30.09.2010 10:04
Проблема с перегрузкой операторов, не могу разобраться mrLee Помощь студентам 1 30.01.2010 00:23
Проблема с перегрузкой операторов, не могу разобраться mrLee Общие вопросы C/C++ 0 29.01.2010 18:45
В конструкторе выделяется память под массив. Как быть с перегрузкой оператора = ? TwiX Общие вопросы C/C++ 6 15.12.2009 12:18