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

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

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

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

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

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

C++ Уменьшение значений элементов матрицы(перегрузка операции "--")
Перегрузка внешней функции операции "operator=" C++
Класс "Матрица": конструктор, деструктор и перегрузка операторов C++
C++ Перегрузка операции "++"
C++ Перегрузка операции "="
Перегрузка операции "-" C++
C++ Перегрузка операции "*" для умножения одномерных массивов
C++ Классы: перегрузка операции "Бинарный +"
Конструктор копирования и перегрузка оператора присваивания C++
C++ Перегрузка операции "%=" глобальной фунцкцией
C++ Создать конструктор копирования для класса "Прямоугольник"
Перегрузка операции "<=" C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Да я в принципе уже разобрался)) конструктор копирования срабатывает когда экзэмляр класса еще не создан, а присваивание когда экземляр класса уще существует. Оба метода нужны чтоб не копировать адреса, а выделять новую память под элементы. Не понятно только почему их нужно использовать в паре (
Yandex
Объявления
26.05.2010, 08:39     Конструктор копирования и перегрузка операции "="
Ответ Создать тему
Опции темы

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