День добрый,
есть два неймспейса, в которых есть одноименные классы. Класс неймспейса наследуется от одноименного класса из неймспейса . Теперь я хочу переопределяю виртуальную функцию , но хочу вызвать и унаследованный код. Как это сделать?
namespace NA1
{
class cA1
{
public:
virtual void Foo()
{
int a = 1;
}
};
}
namespace NA2
{
class cA1: public NA1::cA1
{
public:
virtual void Foo()
{
int b = 1;
cA1::Foo(); // <----- как сказать, что мне нужно вызвать реализацию Foo из одноименного класса, но другого неймспейса?
}
};
}
Как сказать, что мне нужно вызвать реализацию Foo из одноименного класса, но другого неймспейса?
Так NA1::cA1::Foo(); не компиляется.
Так cA1::Foo(); вызывается текущий метод. Получается зацикливание.
А так не получится?
namespace NA2
{
class cA1: public NA1::cA1
{
typedef NA1::cA1 parent_t;
public:
virtual void Foo()
{
int b = 1;
parent_t::Foo();
}
};
}
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, slavo, Вы писали:
Comeau и VC7.1 компилят вариант с NA1::cA1::Foo(); без проблем.
Отсюда можно сделать вывод, что ты пытаешься реализовать это чудо на VC6.
Если я прав, то вот воркэраунд для него:
namespace NA1
{
class cA1
{
public:
virtual void Foo()
{
int a = 1;
}
};
}
namespace NA2
{
class cA1: public NA1::cA1
{
public:
virtual void Foo()
{
int b = 1;
typedef NA1::cA1 Base;
Base* ptr = this;
ptr->Base::Foo();
}
};
}
int main()
{
NA2::cA1 a;
a.Foo();
return 0;
}
ЗЫ
В глазах от одноименных классов немного рябит.
Здравствуйте, Sergey, Вы писали:
S>А так не получится?
Не, VC6 так просто не возьмешь
Здравствуйте, Sergey, Вы писали:
S>А так не получится?
S>S>namespace NA2
S>{
S> class cA1: public NA1::cA1
S> {
S> typedef NA1::cA1 parent_t;
S> public:
S> virtual void Foo()
S> {
S> int b = 1;
S> parent_t::Foo();
S> }
S> };
S>}
S>
не работает. Зацикливается.
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, slavo, Вы писали:
B>Comeau и VC7.1 компилят вариант с NA1::cA1::Foo(); без проблем.
B>Отсюда можно сделать вывод, что ты пытаешься реализовать это чудо на VC6.
B>Если я прав, то вот воркэраунд для него:
B>B>namespace NA1
B>{
B> class cA1
B> {
B> public:
B> virtual void Foo()
B> {
B> int a = 1;
B> }
B> };
B>}
B>namespace NA2
B>{
B> class cA1: public NA1::cA1
B> {
B> public:
B> virtual void Foo()
B> {
B> int b = 1;
B> typedef NA1::cA1 Base;
B> Base* ptr = this;
ptr->>Base::Foo();
B> }
B> };
B>}
B>int main()
B>{
B> NA2::cA1 a;
B> a.Foo();
B> return 0;
B>}
B>
B>ЗЫ
B>В глазах от одноименных классов немного рябит.
Спасибо, работает! Ага, шестая студия
.