支持继承值类型的编程语言

时间:2010-10-20 22:44:52

标签: programming-languages

我用C ++开发,有时候我希望我能这样说:

class Heading : public float    // this line won't compile
{
public:
  Heading( float const value_ )
  : float(value_)               // this line won't compile
  {
    assert( value_ >= 0.0f );
    assert( value_ <= 360.0f );
  }
};

相反,我必须做类似的事情:

class Heading : public float
{
public:
  Heading( float const value_ )
  : value(value_)
  {
    assert( value >= 0.0f );
    assert( value <= 360.0f );
  } 
private:
  float value;
};

是否有任何编程语言允许您扩展值类型?

4 个答案:

答案 0 :(得分:3)

的Python。

一切都是对象。所以扩展float很简单。

class Heading( float ):
   def __init__( self, value ):
       assert 0.0 <= value <= 360.0
       super( Heading, self ).__init__( value )

是的,0.0 <= value <= 360.0是合法的语法。

答案 1 :(得分:3)

在红宝石中你可以更进一步。您实际上可以修改内置类型。

class Float
  class self.heading(val)
    raise RangeError unless (0.0...360.0) === val
    val
  end
end

答案 2 :(得分:1)

Ada允许这种程度有限:具体来说,您的示例可以用Ada表示为

type Heading is digits 10
    range 0.0..360.0;
Pascal有类似的特征,即IIRC,仅限于整数。

我不知道任何允许无限制继承来自float等原始类型的语言。根据定义,面向对象的继承涉及从类继承,根据定义,类似于C ++的float不是。

答案 3 :(得分:0)

DjavaObjective-C允许从内置类型派生。实际上,大多数面向对象的语言都定义为从Object继承的内置类型允许从内置类型继承。 (我确信有一个反例,我们即将在评论中找到它......)