crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> using, какой-то непонятный для меня
Litkevich Yuriy
  опции профиля:
сообщение 2.4.2018, 6:57
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Нашёл в исходниках Qt5:
class Q_WIDGETS_EXPORT QMenu : public QWidget
{
using QWidget::addAction;
//...
}
что здесь происходит?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 14.9.2018, 19:22
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Нашёл простой пример в книге "Стандарты программирования на С++" Герб Саттер и Андрей Александреску.
"Правило №38":
Цитата
Не забывайте о том, что перекрытие методов может скрывать перегруженные методы:
class Base
{
public:
virtual void foo(int);
virtual void foo(int, int);
void foo(int, int, int);
};

class Derived: public Base
{
public:
virtual void foo(int); // переопределяет Base::foo(int), скрывая все перегруженные
};
//---------
Derived d;
d.foo(1); // отлично работает
d.foo(1, 2); // ошибка компиляции, этот метод невидно
d.foo(1, 2, 3); // ошибка компиляции, этот метод невидно


Для того, чтобы перегруженные функции базового класса были видны в наследнике их нужно повторно объявить с помощью using:
class Derived: public Base
{
public:
virtual void foo(int); // переопределяет Base::foo(int), скрывая все перегруженные
using Base::foo;      // делает все прочие перегрузки Base::foo(...) в область видимости этого класса
};
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.4.2024, 9:28