Void main(). cout<<a.foo()<<"\n";
{
A a;
B b;
cout<<a.foo()<<"\n";
cout<<b.foo()<<"\n";
}
Клас В має дві функції foo(). Одна успадкована від А, інша – власна. При пошуку потрібної функції компілятор перегляне дерево спадкування починаючи з дерева В та використовує "найближчу" до класу функцію.
У прикладі результат відповідно 1 та 2.
У даному випадку ім’я в базовому класі переоголошується в похідному класі. Це одне й те ж, що оголошення змінних у складових операторних блоках: кожний блок має свою версію змінних і внутрішні імена подавлюють зовнішні.
Але є і відмінності. У C++ можна примусити компілятора "бачити" за межами поточної області видимості Це робиться за допомогою оператора дозволу видимості. Загальна форма цього оператору така:
<ім’я класу> :: <ідентифікатор із класу>
Для того, щоб використовувати оператор дозволу видимості, модифікуємо клас В в такий спосіб:
class B: public A
{
public:
int foo() { return А::foo();}
};
Тепер виклик функції В::foo() приведе до виклику foo() класу А. Оператор дозволу видимості використовується не тільки усередині функції класу, але і при виклику функції:
Void main()
{
B b;
B * b1;
int x = b. A::foo();
int y = b1-> A::foo();
}
Використаннядозволу видимості після оператора "."
Дата добавления: 2014-12-26; просмотров: 707;