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

Оператор = и наследование - C++

Восстановить пароль Регистрация
 
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
12.10.2011, 13:20     Оператор = и наследование #1
Добрый день,
вот есть код:
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
30
31
class Copier
{
 
public:
    const Copier& operator = (const Copier&)
    {
        qDebug() << "In const Copier& Operator = ";
    }
 
};
 
class A : public Copier
{
 
public:
/*
    const A& operator = (const A&)
    {
        qDebug() << "In const A& Operator = ";
    }
*/
 
 
};
 
int main()
{
    A a, a1;
    a1 = a;
    return 0;
}
Почему при выполнении копирования a1 = a; вызывается оператор const Copier& Copier::operator = (const Copier&)?
Вроде ж по идеи, оператор присваивания не копируется и должен создаваться неявно компилятором для класса А...

Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2011, 13:20     Оператор = и наследование
Посмотрите здесь:

Наследование C++
наследование C++
C++ Наследование
Наследование C++
C++ Наследование
C++ Наследование
C++ наследование
C++ наследование в С++
C++ виртуальный оператор (двусвязный список, наследование)
наследование C++
C++ Наследование

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
 Аватар для Mr.X
3011 / 1667 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
12.10.2011, 14:21     Оператор = и наследование #2
Цитата Сообщение от norge_goth Посмотреть сообщение
Почему при выполнении копирования a1 = a; вызывается оператор const Copier& Copier::operator = (const Copier&)?
Вроде ж по идеи, оператор присваивания не копируется и должен создаваться неявно компилятором для класса А...
Ну дак он и создается, но по стандарту он вызывает все существующие операторы копирующего присваивания непосредственных базовых классов, виртуальных базовых классов, а также членов класса.
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
12.10.2011, 15:09  [ТС]     Оператор = и наследование #3
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну дак он и создается, но по стандарту он вызывает все существующие операторы копирующего присваивания непосредственных базовых классов, виртуальных базовых классов, а также членов класса.
я правильно понимаю, что оператор копирования по умолчанию, копирует Derived часть объекта, а для Base части объекта вызывает const Copier& operator = (const Copier&) ?
Mr.X
Эксперт С++
 Аватар для Mr.X
3011 / 1667 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
12.10.2011, 15:59     Оператор = и наследование #4
Цитата Сообщение от norge_goth Посмотреть сообщение
я правильно понимаю, что оператор копирования по умолчанию, копирует Derived часть объекта, а для Base части объекта вызывает const Copier& operator = (const Copier&) ?
Да, правильно.
Yandex
Объявления
12.10.2011, 15:59     Оператор = и наследование
Ответ Создать тему
Опции темы

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