Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
ЛазаретЪ
1 / 1 / 1
Регистрация: 04.02.2011
Сообщений: 30
1

Перегрузка внутри класса

01.06.2011, 16:58. Просмотров 673. Ответов 15
Метки нет (Все метки)

Как описывается перегрузка внутри класса и вне его?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2011, 16:58
Ответы с готовыми решениями:

Перегрузка внутри класса
Есть класс Points, который использует обычные стандартные функции. Здесь для...

Перегрузка оператора >> для дочернего класса от базового виртуального класса
Доброго вам времени суток! Программирую на С++ не давно, в связи с отсутствием...

Создать объект внутри класса, который может вызывать функцию этого класса
Ребята помогите уже несколько дней мучаюсь. Хочу сделать программу в консоле...

Наследование: Как мне определить любой из методов заданного класса внутри другого класса?
Добрый день, подскажите пожалуйста, что я делаю не так Есть файл Container.h...

BST дерево. Инициализация класса внутри класса
Здравствуйте, нужно реализовать класс дерева бинарного поиска с использованием...

15
bearwoolfs
15 / 15 / 5
Регистрация: 10.01.2011
Сообщений: 275
01.06.2011, 17:09 2
Для этого как раз и существует деструктор.
0
no0ker
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
01.06.2011, 17:31 3
ЛазаретЪ, перегрузка чего? операторов?
0
ЛазаретЪ
1 / 1 / 1
Регистрация: 04.02.2011
Сообщений: 30
01.06.2011, 17:36  [ТС] 4
Цитата Сообщение от no0ker Посмотреть сообщение
ЛазаретЪ, перегрузка чего? операторов?
Я думаю функции
0
no0ker
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
01.06.2011, 17:41 5
перегрузка функции, которая наследуется?
0
ЛазаретЪ
1 / 1 / 1
Регистрация: 04.02.2011
Сообщений: 30
01.06.2011, 17:45  [ТС] 6
А можно про ту, которая наследуется, и которая не наследуется?
0
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
01.06.2011, 17:51 7
bearwoolfs, и каким же образом деструктор связан с перегрузкой?
0
no0ker
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
01.06.2011, 17:53 8
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
#include <iostream>
using namespace std;
 
class A{
    public:
    int test(){
        return 1;
    }
};
 
class B : public A{
    public:
        int test(){ // перегрузка функции, которая наследуется.
            return 2;
        }
};
 
 
int main()
{
    B b;
    std::cout << b.test(); // выводит 2
 
    A* a;
    a = & b;
    std::cout << a->test(); // выводит 1. чтобы выводило 2, необходима виртуальная функция
 
    return 0;
}
Добавлено через 1 минуту
а вот как перегружать функцию, которая не наследуется? непонятно =)
0
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
01.06.2011, 17:59 9
no0ker, вы говорите не о перегрузке, а о переопределении. Перегрузить можно любую функцию, даже глобальную (которая описана вне класса). Вот пример перегрузки в классе (синтетический):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
class Math
{
public:
    static int abs(int num)
    {
        return num < 0 ? -num : num;
    }
 
    static double abs(double num)
    {
        return num < 1E-15 ? -num : num;
    }
};
 
int main()
{
    std::cout << Math::abs(3) << "\t" << Math::abs(-3) << std::endl;
    std::cout << Math::abs(3.5) << "\t" << Math::abs(-3.5) << std::endl;
 
    return 0;
}
0
no0ker
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
01.06.2011, 18:11 10
silent_1991, хмм... а вот это тогда что?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
class A{
    public:
        int test(int a){
            return 1;
        }
 
        int test(char a){
            return 0;
        }
};
 
int main()
{
    A a;
    std::cout<<a.test(13); // 1
    std::cout<<a.test('s'); // 0
 
    return 0;
}
0
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
01.06.2011, 18:13 11
no0ker, это класс с двумя перегруженными функциями)) А к чему, собственно, вопрос?
0
no0ker
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
01.06.2011, 18:18 12
silent_1991, просто запутался. что есть "переопределение" и "перегрузка". второй вариант подходит к термину перегрузка функции? видимо это перегрузка внутри класса, а что подразумевается под "вне его"?
0
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
01.06.2011, 18:39 13
no0ker, а, извините, мне просто показалось, что вопрос был с подвохом и я, возможно, чего-то не заметил в вашем предыдущем коде.
Да, ваш второй код - перегрузка функций (т.е. имеются две функции с одинаковыми именами, но с разными списками параметров).
"Вне его", я думаю, просто имеется ввиду следующий вариант:

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
#include <iostream>
 
class Math
{
public:
    static int abs(int);
    static double abs(double);
};
 
int Math::abs(int num)
{
    return num < 0 ? -num : num;
}
 
double Math::abs(double num)
{
    return num < 1E-15 ? -num : num;
}
 
int main()
{
    std::cout << Math::abs(3) << "\t" << Math::abs(-3) << std::endl;
    std::cout << Math::abs(3.5) << "\t" << Math::abs(-3.5) << std::endl;
 
    return 0;
}
0
no0ker
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
01.06.2011, 18:46 14
silent_1991, хитро. =) хотя прототипы все равно в классе. и функции, как бы это сказать правильно, принадлежат классу. то есть не совсем "вне него",а лишь одной ногой снаружи. =)
0
ЛазаретЪ
1 / 1 / 1
Регистрация: 04.02.2011
Сообщений: 30
01.06.2011, 18:47  [ТС] 15
Как мне преподавателю объяснить на словах (Как описывается перегрузка внутри класса и вне его?)
0
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
01.06.2011, 18:50 16
no0ker, ну да, обычно преподаватели это и имеют ввиду)) Думаю, цель - просто научиться всё описывать внутри класса (как это делается, например, в Java), а так же использовать плюсовый подход, где в хидере пишется только описание класса с прототипами всех методов, а в cpp-файле - уже реализация.
0
01.06.2011, 18:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2011, 18:50

delete внутри класса для самого класса
Доброго времени суток, пишу программу для работы с матрицами. По условию дали...

Заполнение вектора класса внутри самого класса
class A { private: int a; public: A() { a = 0; }; A get(vector...

Объявление дружественного класса внутри класса
class A{ friend class B{ B(A &amp;a); } } ...


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

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

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