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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
ЛазаретЪ
1 / 1 / 0
Регистрация: 04.02.2011
Сообщений: 30
#1

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

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

Как описывается перегрузка внутри класса и вне его?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2011, 16:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка внутри класса (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
bearwoolfs
15 / 15 / 1
Регистрация: 10.01.2011
Сообщений: 275
01.06.2011, 17:09 #2
Для этого как раз и существует деструктор.
no0ker
101 / 88 / 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
101 / 88 / 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
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.06.2011, 17:51 #7
bearwoolfs, и каким же образом деструктор связан с перегрузкой?
no0ker
101 / 88 / 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
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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
101 / 88 / 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
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
01.06.2011, 18:13 #11
no0ker, это класс с двумя перегруженными функциями)) А к чему, собственно, вопрос?
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
01.06.2011, 18:18 #12
silent_1991, просто запутался. что есть "переопределение" и "перегрузка". второй вариант подходит к термину перегрузка функции? видимо это перегрузка внутри класса, а что подразумевается под "вне его"?
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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
101 / 88 / 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:47
Привет! Вот еще темы с ответами:

Объявление дружественного класса внутри класса - C++
class A{ friend class B{ B(A &amp;a); } } Подскажите пожалуйста, такое возможно или нет, я хотел чтобы...

Видимость экземпляра класса внутри класса - C++
Здравствуйте! Пытаюсь вывести openCV видео в QT виджете. На данный момент в слоте обновления картинки инициализирую класс cv::VideoCapture...

Методы класса внутри определения класса - C++
Все привет! Решил закрепить свои знания по C++, читаю Р.Лафоре - &quot;Объектро-ориентированное программирование в C++&quot;. В книге, на...

Инициализация класса A внутри класса B - C++
заранее извиняюсь, наверняка подобное было на одной из 1000 страниц=)... есть 2 класса //собственно первый класс class matrix ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.06.2011, 18:47
Ответ Создать тему
Опции темы

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