Здравствуйте, commando, Вы писали:
C>Добрый день.
C>Скажите, как сделать свойство в C++ виртуальным (.Net 2003)? Я пытаюсь сделать виртуальными функции-аксессоры:
C>C>__declspec (property(get=AngleGet, put=AnglePut)) double Angle;
C>virtual double AngleGet()
C>{
C> //...
C>}
C>virtual void AnglePut(double val)
C>{
C> //...
C>}
C>
C>И переопределить их в производном классе, но все равно вызываются функции базоого класса. Объявить само свойство виртуальным не получается, ошибка virtual not permitted with data declarations.
C>PS. Хочется сделать это способом, наиболее похожим на native-язык.
Все просто. Делаешь повторное объявление __declspec (property(get=AngleGet, put=AnglePut)) double Angle;
в наследнике и все
Вот работающий пример
#include "stdafx.h"
class A
{
private:
__int64 TestValue;
public:
__declspec(property(get=getVal, put=setVal)) __int64 Val;
virtual void setVal(__int64 v)
{
TestValue = v;
}
virtual __int64 getVal()
{
return TestValue;
}
};
class B :public A
{
public:
__declspec(property(get=getVal, put=setVal)) __int64 Val;
virtual __int64 getVal()
{
return -1;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
B test;
test.Val = 1111;
if (test.Val == -1)
{
printf("success");
}
return 0;
}
Если из B убрать __declspec(property(get=getVal, put=setVal)) __int64 Val;
будет работать как ты описал.