Я действительно не понимаю, когда мне нужно ключевое слово using
. Всегда ли вам это нужно, когда вы хотите использовать функцию или объект из базового класса? Я считаю, что я должен использовать его, даже если я не перегружаю функцию.ключевое слово `using` для поведения по умолчанию из базового класса
ответ
Есть только два случая, когда вам нужно использовать using
в классе. Во-первых, когда вы определяете функцию в классе с тем же именем, что и в базовом классе, и вы хотите использовать перегрузку с учетом обоих из них. Другой - когда вы хотите использовать конструктор базового класса как производный конструктор.
Есть ли разница в этом правиле, если базовый класс является шаблоном? – Plamen
@Plamen, я не понимаю, почему наличие шаблона для базового класса имеет значение, но я не могу его окончательно сформулировать. –
Спасибо за ваш ответ! Я думаю, что это имеет значение, если вы используете шаблоны. Я выполнял некоторые тесты, и кажется, что компилятор не может понять, что делать, когда используется параметр шаблона. У меня есть функция «глупо» в базе и получить «error: нет аргументов для« глупостей », которые зависят от параметра шаблона, поэтому должно быть доступно объявление« глупо »[-fpermissive]', если я использую его в полученный (он не обновляется, только используется). – Plamen
Вам нужно только using
-directive для членов базового класса, когда вы перегружать соответствующее имя в производном классе и вы хотите сделать базовый класс перегружает видимым. Когда вы не перегружаете имя в выбранном классе, вам вообще не нужен директиву using
.
Фон состоит в том, что было сочтено удивительным, если изменение базового класса приведет к перегрузке функции. Таким образом, перегрузки из базовых классов по умолчанию скрыты. Если вы хотите, чтобы их использовали, вы делаете перемену explucit.
Предположим, что правило не было на месте и рассмотрим производный класс, определяющий член f(double)
, который называется object.f(0)
. Если базовый класс изменен, чтобы обеспечить f(int)
, и отображаются перегрузки, новая функция будет лучше соответствовать. То есть, не будучи видимым до того, как поведение будет тихо изменено. Это, наверное, плохая идея.
Вы должны использовать его, если имеете дело с пространствами имен. Например:
using namespace std;
using std::cout;
using std::endl;
// without that you have to type it in following way
std::cout << std::endl;
// which is not the best way if you use it very often,
// but good if you want to use some names in your code
Это позволяет использовать некоторые библиотеки, которые имеют пространства имен. Он создан для инкапсуляции (скрытия) переменных, классов и методов, в противном случае это займет больше пространства имен и запретит вам использовать некоторые имена в вашем проекте.
Вопрос OP имеет [ничего общего с пространствами имен] (http://en.cppreference.com/w/cpp/language/using_declaration) – Mgetz
- 1. using volatile ключевое слово
- 2. Неожиданное ключевое слово @using
- 3. C++ 11 = ключевое слово по умолчанию для виртуальной функции для указания чистой реализации по умолчанию
- 4. «using» ключевое слово для назначения нового класса C++/CLI
- 5. Почему я должен использовать ключевое слово «using» для доступа к методу базового класса?
- 6. C#: «по умолчанию» ключевое слово с Дженерики
- 7. статическое ключевое слово по-умолчанию в Java
- 8. C# по умолчанию ключевое слово по умолчанию на C++?
- 9. MySQL ошибки использования по умолчанию Ключевое слово
- 10. вызова метода базового используя новое ключевое слово
- 11. использовать или использовать ключевое слово «using»
- 12. Можно ли отменить ключевое слово "using"?
- 13. var ключевое слово без 'using someNamespace'
- 14. Ключевое слово класса в Javascript
- 15. Ключевое слово частичного класса EnvDTE
- 16. Принудительный метод для вызова базового метода из базового класса
- 17. C++ using-declarations Для вызова функции из базового класса
- 18. javafx prevent Введите ключевое слово по умолчанию из действия кнопки по умолчанию
- 19. C# переопределить ключевое слово
- 20. Использование базового конструктора по умолчанию (с параметрами) для дочернего класса
- 21. Переопределение поведения по умолчанию STI
- 22. Обоснование разницы в спецификаторе доступа по умолчанию для базового класса
- 23. Изменение поведения по умолчанию JS по умолчанию
- 24. Переопределение по умолчанию поведения по умолчанию
- 25. Вызов родительского метода унаследованного класса из базового класса
- 26. по умолчанию ключевое слово в импорт экспорт ES6
- 27. Groovy типов по умолчанию, используя ключевое слово четкости
- 28. Ключевое слово для внешнего класса от анонимного внутреннего класса
- 29. Новое ключевое слово = по умолчанию в C++ 11
- 30. Значение изменения CSS для ключевых слов базового цвета по умолчанию
Вам нужно узнать об пространствах имен. – SLaks
@SLaks вопрос OP имеет [ничего общего с пространствами имен] (http://en.cppreference.com/w/cpp/language/using_declaration) – Mgetz