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

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

Восстановить пароль Регистрация
 
ЛазаретЪ
1 / 1 / 0
Регистрация: 04.02.2011
Сообщений: 30
01.06.2011, 16:58     Перегрузка внутри класса #1
Как описывается перегрузка внутри класса и вне его?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bearwoolfs
 Аватар для bearwoolfs
15 / 15 / 2
Регистрация: 10.01.2011
Сообщений: 275
01.06.2011, 17:09     Перегрузка внутри класса #2
Для этого как раз и существует деструктор.
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
01.06.2011, 17:31     Перегрузка внутри класса #3
ЛазаретЪ, перегрузка чего? операторов?
ЛазаретЪ
1 / 1 / 0
Регистрация: 04.02.2011
Сообщений: 30
01.06.2011, 17:36  [ТС]     Перегрузка внутри класса #4
Цитата Сообщение от no0ker Посмотреть сообщение
ЛазаретЪ, перегрузка чего? операторов?
Я думаю функции
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
01.06.2011, 17:41     Перегрузка внутри класса #5
перегрузка функции, которая наследуется?
ЛазаретЪ
1 / 1 / 0
Регистрация: 04.02.2011
Сообщений: 30
01.06.2011, 17:45  [ТС]     Перегрузка внутри класса #6
А можно про ту, которая наследуется, и которая не наследуется?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
01.06.2011, 17:51     Перегрузка внутри класса #7
bearwoolfs, и каким же образом деструктор связан с перегрузкой?
no0ker
100 / 87 / 4
Регистрация: 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 минуту
а вот как перегружать функцию, которая не наследуется? непонятно =)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 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;
}
no0ker
100 / 87 / 4
Регистрация: 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;
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
01.06.2011, 18:13     Перегрузка внутри класса #11
no0ker, это класс с двумя перегруженными функциями)) А к чему, собственно, вопрос?
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
01.06.2011, 18:18     Перегрузка внутри класса #12
silent_1991, просто запутался. что есть "переопределение" и "перегрузка". второй вариант подходит к термину перегрузка функции? видимо это перегрузка внутри класса, а что подразумевается под "вне его"?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 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;
}
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
01.06.2011, 18:46     Перегрузка внутри класса #14
silent_1991, хитро. =) хотя прототипы все равно в классе. и функции, как бы это сказать правильно, принадлежат классу. то есть не совсем "вне него",а лишь одной ногой снаружи. =)
ЛазаретЪ
1 / 1 / 0
Регистрация: 04.02.2011
Сообщений: 30
01.06.2011, 18:47  [ТС]     Перегрузка внутри класса #15
Как мне преподавателю объяснить на словах (Как описывается перегрузка внутри класса и вне его?)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2011, 18:50     Перегрузка внутри класса
Еще ссылки по теме:

C++ Создать объект внутри класса, который может вызывать функцию этого класса
C++ Методы класса внутри определения класса
C++ Видимость экземпляра класса внутри класса

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
01.06.2011, 18:50     Перегрузка внутри класса #16
no0ker, ну да, обычно преподаватели это и имеют ввиду)) Думаю, цель - просто научиться всё описывать внутри класса (как это делается, например, в Java), а так же использовать плюсовый подход, где в хидере пишется только описание класса с прототипами всех методов, а в cpp-файле - уже реализация.
Yandex
Объявления
01.06.2011, 18:50     Перегрузка внутри класса
Ответ Создать тему
Опции темы

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