Здравствуйте, deadlight, Вы писали:
D>Вот работающий пример
Самое интересное: если в этом примере обращаться к свойству через указатель на базовый класс, то оно ведет себя вполне полиморфно!!! При этом я не определял заново свойство в производном классе и даже не определял свойство как вирутальное!
#include "stdafx.h"
#include <iostream>
class A
{
private:
__int64 TestValue;
public:
__declspec(property(get=getVal, put=setVal)) __int64 Val;
virtual void setVal(__int64 v)
{
TestValue = v;
}
virtual __int64 getVal()
{
std::cout << "from base" << std::endl;
return TestValue;
}
};
class B :public A
{
public:
__declspec(property(get=getVal, put=setVal)) __int64 Val;
__int64 getVal()
{
std::cout << "from inherited" << std::endl;
return -1;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A * ptr = new B();
if (ptr->Val == -1)
{
printf("success");
}
return 0;
}
Такое впечатление, что при обращении через точку свойство встраивается get из того класса, в котором определено свойство, а через указатель — из таблицы виртуальных функций...