敲响OO时代的丧钟——一种新的语言(3)

本文探讨了final修饰符在数据类型定义中的作用及其与Java中final的区别,以及如何通过动态转型实现不同数据类型间的相互转换。
与数据类型定义相关的,还有一些小问题,这里再讨论一下。
 
1、final修饰符
 
datatype作为校验的依据,其实分为两个部分:是否存在某一特定名称与类型的变量;变量是否符合一组check条件。因此,任何数据,只要能够事实上通过abc类型的校验条件,就可以算作是abc类的数据,并不需要在定义中显式的声明为as abc云云。这个语法设定,并没有考虑到一种特殊条件——满足条件,但是有多余数据的情况。因此我们需要在datatype之前,再加上final修饰符,这就意味着,如果有数据通过了所有的判据,但是还有多余的变量,我们将认为这个数据并不属于abc类型。
 
与java中的final有区别的是,final并不是一个拒绝代码重用的手段。假设一个新的数据类型ddd,通过as重用了abc类型的判断条件,当一个实际为ddd类型的数据被校验时,它将只是ddd型数据,而非abc型数据。而如果我们取消abc定义时的final修饰符,则这个数据将同时算做abc型与ddd型。
 
2、数据转型
 
如果一个数据原本是ddd型的,而ddd型同时又是满足abc型的判据的,那么这个ddd型数据,可以自由的转型为abc型,无需任何显式的声明。但是,另外一种转型需求,也是存在的。
 

datatype Point{

    double x;
    double y;
   
}

 

Point是一个平面几何中的一个点。当我们希望建立一套“复平面”几何的时候,其实是相当容易的。

 

datatype Complex{

    double real;

    double img;
}

 

Point与Complex是如此的相似,那么能够处理Point的Method,能不能处理Complex呢?

 

我们需要定义两个个动态转型规则:

dynamic_cast<Point,Complex>{

    x->real;

    y->img;

}  Point_Complex;

 

dynamic_cast<Complex,Point>{

    real->x;

    img->y;

}  Complex_Point;

 

这样,当我们写下:(Point_Complex)p1;的时候,我们就能得到一个Complex型的数据了。

而当我们写下:(Complex_Point)c1;的时候,我们就能得到一个Point型的数据了。

 

(未完待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值