Re: Виртуальные свойства в C++
От: deadlight Россия  
Дата: 08.09.06 06:23
Оценка: 1 (1)
Здравствуйте, 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;
будет работать как ты описал.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.