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

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

Войти
Регистрация
Восстановить пароль
 
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
#1

Конструктор копирования и перегрузка операции "=" - C++

26.05.2010, 04:25. Просмотров 992. Ответов 2
Метки нет (Все метки)

Привет всем, я не понимаю для чего конструктор копирования и перегрузку операции присваивания необходимо использовать в паре, Не пойму в чем между ними разница. и в какой очередности они выполняются. Объясните пожалуйста, если можно, то на конкретном примере. Заранее благодарен за любую помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2010, 04:25     Конструктор копирования и перегрузка операции "="
Посмотрите здесь:

Создать конструктор копирования для класса "Прямоугольник" - C++
Всем привет! Помогите разобраться, пожалуйста! Есть такое задание: Определить класс "прямоугольник". Высчитать его...

Перегрузка операции "*" для умножения одномерных массивов - C++
Нужна помощь. Есть условие задачи: Выполните перегрузку операции "*" для умножения одномерных массивов. Заранее спасибо.

Уменьшение значений элементов матрицы(перегрузка операции "--") - C++
Задача Перегрузите операцию "--" позволяющую уменьшать переменную типа матрица на 1. В результате каждылемент матрицы должен...

Перегрузка внешней функции операции "operator=" - C++
1) Возможна ли перегрузка внешней функцией операции "operator="? Чтобы скажем выполнить нечто: int = объект 2) Компилятор (mingw)...

Классы: перегрузка операции "Бинарный +" - C++
Помогите пожалуйста реализовать перегрузку операции бинарный+:добавляет к значению поля amount значения скаляра #include <iostream> ...

Перегрузка операции "%=" глобальной фунцкцией - C++
Здравствуйте, я тут, решая задачу на перегрузку оператора при помощи глобальной функции наткнулся на такую проблему: Есть класс op, в нем...

Перегрузка функций "ввести в поток", "вывести с потока", "умножить вектор на число" - C++
Подскажите пожалуйста, как убрать ошибки с этой программы? (делала перегрузку "ввести в поток" и "вывести с потока", а также "умножить...

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

Перегрузка операции "-" - C++
Допустим есть строка: string s1 = "123ab5"; // string - класс Нужно сделать, чтобы после string s2 = s1-3; // число может быть любым...

Перегрузка операции "<=" - C++
Здравствуйте, есть 2 класса: MEllipse и CTriangle, они наследники абстрактного класса CGraphicsObject. Допустим, в main создаётся по...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Syndarin
13 / 13 / 1
Регистрация: 15.09.2009
Сообщений: 57
26.05.2010, 08:29     Конструктор копирования и перегрузка операции "=" #2
Думаю, что объясню не очень хорошо т.к. сам новичок в энтом деле. Но пример приведу, недавно делал лабу на эту тему:

В моей лабе была задача перегрузить оператор присваивания для установки исходного значения объекта класса "Дата". Т.е. необходимо было сделать, чтобы объекту присвоилось значение строки, введенной пользователем:

Вот описание перегрузки в hpp-файле:

C++
1
2
//=====OperatorOverload=====
    void operator= (char *temp);
Вот так это было реализовано:

C++
1
2
3
4
5
6
7
8
void CDateAddMonth::operator =(char *temp)
{   
    int dd, mm, yyyy;
    sscanf(temp, "%d.%d.%d", &dd, &mm, &yyyy);
    m_date_day=dd;
    m_date_month=mm;
    m_date_year=yyyy;
}
И вот так это было использовано в функции main():

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
    CDateAddMonth MyDate;
    char temp[20];
    int plus;
    int error=1;
 
    while(error)//ввод даты пользователем
    {
        printf("Please set the date (q to exit): ");
        scanf("%s", temp);
        if(!(strcmp(temp, "q")))
            break;
        if(!(control(temp)))
        {
            printf("Your date is invalid!\n");
            continue;
        }
        [B]MyDate=temp;[/B]//присваивание
                ...................
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
26.05.2010, 08:39  [ТС]     Конструктор копирования и перегрузка операции "=" #3
Да я в принципе уже разобрался)) конструктор копирования срабатывает когда экзэмляр класса еще не создан, а присваивание когда экземляр класса уще существует. Оба метода нужны чтоб не копировать адреса, а выделять новую память под элементы. Не понятно только почему их нужно использовать в паре (
Ответ Создать тему
Опции темы

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