Что означает qualify?

при чтении статей, учебных пособий и т. д... о программировании, я всегда сталкиваюсь со словом qualified. как и в java, полное имя класса будет com.образец.Класс. Чтение этой статья, определяет оператор разрешения области :: в C++ как используемый для квалификации скрытых имен, чтобы вы могли их использовать. Есть ли для этого определение ? Потому что он, кажется, используется в другом контексте каждый раз.

2 ответов


в компьютерном программировании, полное имя-это однозначное имя указывает, к какому объекту, функции или переменной относится вызов без учета контекста призыва. В иерархическая структура, имя полностью определено, когда оно " завершено в том смысле, что он включает (а) все имена в иерархической последовательности над данным элементом и (b) название данного элемента себя."Таким образом, полностью квалифицированные имена явно ссылаться на пространства имен в противном случае это было бы неявным из-за области вызова. Хотя это всегда делается для устранения двусмысленности, это может означать разные все зависит от контекста.

Источник Википедия

короче говоря, это значит, что,

у вас может быть класс с именем Math в вашем проекте, но Math уже присутствует в Java.

Итак, для однозначного определения того, какой класс вы собственно говоря, нужно тоже уточнить имя пакета:

java.lang.Math //refers to java class Math
org.myproject.Math //refers to your project Math class

От Мерриама Вебстера

полное определение квалификации

транзитивный глагол Один a: для перехода от общей к конкретной или ограниченной форме: изменить b : сделать менее жестким или строгим: умеренный c : изменить прочность или вкус d: ограничить или изменить значение (как существительное) Два : характеризовать имя атрибута : описание Три a : приспосабливать тренировкой, искусством, или способностью для специальной цели Б (1) : для объявить компетентным или адекватным: сертификат (2) : инвестировать с правоспособностью : лицензия

применяются пункты 1 и 2. Java и C++ имеют области/пространства имен, а "квалификация" означает введение достаточных областей для различения потенциальных кандидатов.

C. f.: Если у вас есть два класса с членом под названием "read".

class Foo {
    void read();
};

class Bar {
    void read();
};

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

void read() {}

это допустимо, но это создает функцию в глобальном пространстве имен, а не реализует одну из двух функций. Тот же код, написанный внутри определения класса Foo, будет реализовывать Foo:: read.

таким образом, чтобы реализовать наши функции - члены вне определений классов, мы должны квалифицировать - уменьшить от общего, чтобы назвать атрибут пути контейнера, который читается, мы реализуем.

void Foo::read() {}
void Bar::read() {}

глобальное пространство имен "::", так вы даже можете быть откровенными если вы пытаетесь использовать это:

void ::read() {}  // note: this name is already taken by stdio's read() :)