powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / перегрузка операторов и наследование
15 сообщений из 15, страница 1 из 1
перегрузка операторов и наследование
    #34297246
Dima_Mihalych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть
class TClass1
{
public:
int &operator = ( const int & );
};

есть

class TClass2 :public TClass1
{
public:

};

Когда делаю так компилятор ругается

TClass2 Class2;
Class2 = 25;

Пишет, что в TClass2 отсутствует оператор TClass2::operator = ( const int & )

Подскажите как из этой ситуации можно красиво выйти.
...
Рейтинг: 0 / 0
перегрузка операторов и наследование
    #34297374
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima_Mihalychесть
class TClass1
{
public:
int &operator = ( const int & );
};

есть

class TClass2 :public TClass1
{
public:

};

Когда делаю так компилятор ругается

TClass2 Class2;
Class2 = 25;

Пишет, что в TClass2 отсутствует оператор TClass2::operator = ( const int & )

Подскажите как из этой ситуации можно красиво выйти.

попробовать:

Код: plaintext
Class2 = Class1( 25 );
or
[SRC c++]Class1 c1 = 25;
Class2 = c1;
[SRC c++]
...
Рейтинг: 0 / 0
перегрузка операторов и наследование
    #34297426
компилятор создает для TClass2 оператор присваивания по умолчанию, который скрывает ваш.
"открыть" можно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
class TClass2: public TClass1
{
public:

	using TClass1::operator=;
};
...
Рейтинг: 0 / 0
перегрузка операторов и наследование
    #34297452
Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Голенков Владимиркомпилятор создает для TClass2 оператор присваивания по умолчанию, который скрывает ваш.
A разве присваивание по умолчанию выглядит нетак?
Код: plaintext
A& operator=(const A&)
Голенков Владимир
"открыть" можно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
class TClass2: public TClass1
{
public:

	using TClass1::operator=;
};


Ради интереса набрал код - и с этой поправкой выдает ту же ошибку
...
Рейтинг: 0 / 0
перегрузка операторов и наследование
    #34297471
A разве присваивание по умолчанию выглядит нетак?
Код: plaintext
A& operator=(const A&)

именно. вот он и скрывает унаследованные имена (operator=)

Ради интереса набрал код - и с этой поправкой выдает ту же ошибку

какой компилятор и полный код ошибки?
...
Рейтинг: 0 / 0
перегрузка операторов и наследование
    #34297500
Ради интереса набрал код - и с этой поправкой выдает ту же ошибку

проверил: из доступных компиляторов проходит на VS2003/2005, g++ 3.2.3
не проходит на VS6 :(

такие дела
...
Рейтинг: 0 / 0
перегрузка операторов и наследование
    #34297520
Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Голенков Владимир A разве присваивание по умолчанию выглядит нетак?
Код: plaintext
A& operator=(const A&)

именно. вот он и скрывает унаследованные имена (operator=)

А че-й то он скрывает? Ведь унаследованный оператор принимает const int&? Разве так и должно быть?
Голенков Владимир
Ради интереса набрал код - и с этой поправкой выдает ту же ошибку

какой компилятор и полный код ошибки?

Visual Studio 6.0, код ошибки
VS6.0binary '=' : no operator defined which takes a right-hand operand of type 'const int' (or there is no acceptable conversion)
...
Рейтинг: 0 / 0
перегрузка операторов и наследование
    #34297521
Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Голенков Владимирпроверил: из доступных компиляторов проходит на VS2003/2005, g++ 3.2.3
не проходит на VS6 :(

такие дела
О как!
...
Рейтинг: 0 / 0
перегрузка операторов и наследование
    #34297532
А че-й то он скрывает? Ведь унаследованный оператор принимает const int&? Разве так и должно быть?

да, ибо таков стандарт..

вот пример, попробуйте закоментить using:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
class Class1
{
public:
	void a(){}
};

class Class2: public Class1
{
public:
	using Class1::a;
	void a(int i){}
};


int main()
{
	Class2 c2;
	c2.a();

	return  0 ;
}
...
Рейтинг: 0 / 0
перегрузка операторов и наследование
    #34297539
Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Голенков Владимир А че-й то он скрывает? Ведь унаследованный оператор принимает const int&? Разве так и должно быть?

да, ибо таков стандарт..

Прикольно, а я это как-то забыл совсем... Спасибо что напомнили!
...
Рейтинг: 0 / 0
перегрузка операторов и наследование
    #34297584
dasx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите правильно ли я понял как это всё работает. Собственно как понял я:
Если в классе наследнике перегружается метод базового класса, то автоматически скрывается перегруженый метод с базового класса.
...
Рейтинг: 0 / 0
перегрузка операторов и наследование
    #34297677
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima_Mihalych пишет:

> Пишет, что в TClass2 отсутствует оператор TClass2::operator = ( const
> int & )
>
> Подскажите как из этой ситуации можно красиво выйти.

operator = не наследуется.

Вот цитата (12.8.10):

Because a copy assignment operator is implicitly declared for a class if not
declared
by the user, a base class copy assignment operator is always hidden by the copy
assignment operator of a derived class
(13.5.3). A using-declaration (7.3.3) that brings in from a base class an
assignment operator with a parameter type
that could be that of a copy-assignment operator for the derived class is not
considered an explicit declaration of a
copy-assignment operator and does not suppress the implicit declaration of the
derived class copy-assignment operator;
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
перегрузка операторов и наследование
    #34298171
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dasxПодскажите правильно ли я понял как это всё работает. Собственно как понял я:
Если в классе наследнике перегружается метод базового класса, то автоматически скрывается перегруженый метод с базового класса.

Да. И надо либо uses, либо явное указание.
...
Рейтинг: 0 / 0
перегрузка операторов и наследование
    #34298690
Dima_Mihalych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за подробные пояснения. Теперь все ясно!
...
Рейтинг: 0 / 0
перегрузка операторов и наследование
    #34299755
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dasxПодскажите правильно ли я понял как это всё работает. Собственно как понял я:
Если в классе наследнике перегружается метод базового класса, то автоматически скрывается перегруженый метод с базового класса.

едак для любого метода класса - как токо переопределил, так родительский и канул в лету.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / перегрузка операторов и наследование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]