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;
//...
}
что здесь происходит?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 2.4.2018, 9:04
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


объявляется класс QMenu - потомок QWidget

а в чём подвох ? :o:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.4.2018, 5:56
Сообщение #3


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

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

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




Репутация:   94  


using?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_guest_*
сообщение 26.4.2018, 6:04
Сообщение #4





Гости








    


Цитата(Litkevich Yuriy @ 2.4.2018, 6:57) *
Нашёл в исходниках Qt5:
class Q_WIDGETS_EXPORT QMenu : public QWidget
{
using QWidget::addAction;
//...
}
что здесь происходит?

http://en.cppreference.com/w/cpp/language/...lass_definition
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.9.2018, 19:22
Сообщение #5


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

Группа: Сомодератор
Сообщений: 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 Текстовая версия Сейчас: 22.11.2024, 7:03