我用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;
};
是否有任何编程语言允许您扩展值类型?
答案 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)
D,java和Objective-C允许从内置类型派生。实际上,大多数面向对象的语言都定义为从Object继承的内置类型允许从内置类型继承。 (我确信有一个反例,我们即将在评论中找到它......)