Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор - C++
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать конструктор по умолчанию, копирования и...

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

Класс "Матрица": конструктор, деструктор и перегрузка операторов - C++
Матрица – KMatrix Методы: конструкторы, деструктор; операции: , =, ==, !=,...

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

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

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

2
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]//присваивание
                ...................
1
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
26.05.2010, 08:39  [ТС] #3
Да я в принципе уже разобрался)) конструктор копирования срабатывает когда экзэмляр класса еще не создан, а присваивание когда экземляр класса уще существует. Оба метода нужны чтоб не копировать адреса, а выделять новую память под элементы. Не понятно только почему их нужно использовать в паре (
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2010, 08:39
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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