Ключевое
Явное разрешение имен (explicit name resolution) в C++ позволяет обращаться к скрытым методам и членам базового класса в производном классе.
Использование ::
оператора:
- Оператор разрешения области видимости (
::
) используется для явного указания на метод или член базового класса.
Пример:
#include <iostream>
class Base {
public:
void show() {
std::cout << "Base class show() method" << std::endl;
}
};
class Derived : public Base {
public:
void show() {
std::cout << "Derived class show() method" << std::endl;
}
void callBaseShow() {
Base::show(); // Явный вызов метода базового класса
}
};
int main() {
Derived derivedObj;
derivedObj.show(); // Вывод: Derived class show() method
derivedObj.callBaseShow(); // Вывод: Base class show() method
return 0;
}
Явное разрешение имен для конструкторов:
- Конструкторы базового класса могут быть явно вызваны в списке инициализации конструктора производного класса.
class Base {
public:
Base(int value) {
std::cout << "Base class constructor with value: " << value << std::endl;
}
};
class Derived : public Base {
public:
Derived(int value) : Base(value) { // Явный вызов конструктора базового класса
std::cout << "Derived class constructor" << std::endl;
}
};
int main() {
Derived derivedObj(42); // Вывод: Base class constructor with value: 42
// Derived class constructor
return 0;
}
Явное разрешение имен для скрытых членов:
- Если производный класс скрывает члены базового класса, можно использовать оператор
::
для явного доступа к ним.
#include <iostream>
class Base {
public:
int value;
Base(int v) : value(v) {}
};
class Derived : public Base {
public:
int value; // Скрывает член value базового класса
Derived(int baseValue, int derivedValue) : Base(baseValue), value(derivedValue) {}
void showValues() {
std::cout << "Derived class value: " << value << std::endl;
std::cout << "Base class value: " << Base::value << std::endl; // Явный доступ к скрытому члену базового класса
}
};
int main() {
Derived derivedObj(10, 20);
derivedObj.showValues(); // Вывод: Derived class value: 20
// Base class value: 10
return 0;
}