文档章节

d语言类的继承

轻舞凋零
 轻舞凋零
发布于 2016/02/01 14:33
字数 449
阅读 34
收藏 0

参考自d程序设计语言---我的博客http://my.oschina.net/u/218155/blog?fromerr=SwOkb7Sw fllow me

d语言支持继承语法为

class A{
    int a;
    this(){writeln("A");}
    this(int a){this.a = a;}
}
class B:A{
    this(){writeln("B");}
    this(int b){writeln("b is ",b);}
}

auto a = new B();//输出 A B
auto a = new B(11);//输出 A b is 11

子类B会自动调用父类A的构造方法

子类要覆盖父类的方法必须添加override关键字

final可以修饰类,方法,和变量,被修饰的类,方法,变量禁止覆盖

也支持子类向上转型为父类,但是不支持父类转型为子类

d语言中所有的类都有共同的父类object

object自带如下方法

toString toHash opEquals(Object ths)
opCmp(Object ths) static Object factory(string classname)

利用object创建对象

auto f4 = cast(A)Object.factory("test.A");
import std.stdio;

//final class Contract {
class Contract {
	//final int data = 1;
	int data;
	static this(){
		writeln("Contractoverride");
	}
	this(Contract source){

	}
	this() {
		
	}
	void dosomething(){
		writeln("do some thing");
	}
	string getBgColor(){
		return "black";
	}

	//final Contract dupli(){
	Contract dupli(){
		return new Contract(this);
	}
}

class Friend :Contract {
	static int count = 11;
	int data  = 3;
	string mycolor = "white";

	this(Friend source){

	}
	this() {
		
	}
	override string getBgColor(){
		super.dosomething();
		writeln(this.data+super.data);
		return mycolor;
	}
	//override Contract dupli(){
	override Friend dupli(){		
		return new Friend(this);
	}

	override bool opEquals(Object rhs){
		auto cop = cast(Friend) rhs;
		if(!cop) return false;
		return data == cop.data && mycolor == cop.mycolor;
	}

	override int opCmp(Object rhs){
		auto cop = cast(Friend) rhs;
		if(!cop) return -1;
		if(cop.data == data){
			return 0;
		}else if(cop.data > data){
			return 1;
		}else{
			return -1;
		}
	}

}

unittest {
	auto c = new Contract();
	assert(c.getBgColor() == "black");
	auto f = new Friend();
	assert(f.getBgColor() == "white");
	Contract c2 = new Friend();
	assert(c2.getBgColor() == "white");
	//Friend f2 = new Contract();//error
	Contract c3 = c.dupli();
	assert(c3.getBgColor() == "black");
	Friend f2 = f.dupli();
	assert(f2.getBgColor() == "white");
	//static 可以从对象调用
	//Object方法    toString toHash opEquals(Object ths)
	//opCmp(Object ths) static Object factory(string classname)
	assert(f2.count == 11);
	assert(f2.toString() == "inheritance_list.Friend");
	assert(f.opEquals(f2));
	f2.data = 21;
	assert(!f.opEquals(f2));
	assert(f.toHash());
	assert(f.opCmp(f) == 0);
	assert(f2.opCmp(f) == -1);
	auto f4 = cast(Friend)Object.factory("inheritance_list.Friend");
	assert(f4.data  == 3);
	
}

 

© 著作权归作者所有

共有 人打赏支持
上一篇: d语言之接口
下一篇: d语言之类
轻舞凋零
粉丝 13
博文 100
码字总数 16794
作品 0
昌平
程序员
私信 提问
Dlang 2.080.0 版本发布,系统级编程语言

近期D语言在版本发布迭代速度上有明显提升,此次D语言 2.080.0 版本更新特性如下: 增强编译时特性可用性 提供更好的 Objective-C 兼容 废弃一些早期版本不推荐使用的类和方法 对标准库的多方...

冰力
05/13
0
0
10月编程语言排行榜:不成大器的D语言

【51CTO独家特稿】今天Tiobe发布了2011年10月编程语言排行榜,本期排行榜我们看到Lua这门语言蹿升很快,而传统的竞争对手C#和PHP正在交替自己的位置。Assembly(汇编语言)正在大踏步的向后退...

zjf_sdnu
2011/10/17
0
0
系统级编程语言性能大PK的笑话-Go语言

喜欢和不喜欢Go语言的都喜欢拿性能PK说事. 流传比较广的是benchmarksgame的PK数据: http://benchmarksgame.alioth.debian.org/u64q/go.php 在 benchmarksgame测试中, Go语言的性能已经由之前...

chai2010
2013/08/06
0
7
LDC 1.9.0 发布,基于 LLVM 架构的 D 语言编译器

Kinke 代表LDC团队,很高兴地宣布LDC 1.9,这个版本的重点是: 编译器兼容 dlang 2.079.1 (引入了新的 -i 参数来支持最小D语言运行时); 支持 llvm 6,用于所有预构建包(Win32除外); 可...

冰力
05/13
0
3
Linux C++ 环境搭建 IDE选择 Code::Blocks

在linux下面IDE还是挺多的。 本来打算用elcipse的,但是发现了一个更好更快的C++IDE http://www.codeblocks.org/ Code::Blocks 是一个C++免费的跨平台IDE。 1,下载安装 下载地址: http...

freewebsys
2012/12/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

十月开源项目推荐:专为 Python 初学者准备的 IDE 你用过吗?

每月新增开源项目。顾名思义,每月更新一期。我们会从社区上个月新收录的开源项目中,挑选出有价值的、有用的、优秀的、或者好玩的开源项目来和大家分享。数量不多,但我们力求推荐的都是精品...

编辑部的故事
12分钟前
6
0
Java/Android 获取文件夹的文件列表(file.listFiles())并按名称排序,中文优先

排序规则 因为是中国人,习惯性看中文文件夹放前面比较顺眼,所以在别人博客(https://blog.csdn.net/da_caoyuan/article/details/56664673)的基础上,加上了自己的排序规则。 默认排序规则...

她叫我小渝
12分钟前
0
0
RabbitMQ通过shovel插件迁移数据

前言 生产环境中会遇到RabbitMQ数据迁移的场景,例如:切换云服务厂商、不同Region之间数据迁移、新搭建RabbitMQ实例,数据需要同步至新的RabbitMQ实例。 前提条件: 源RabbitMQ实例打开了s...

中间件小哥
15分钟前
0
0
kubernetes 环境搭建

kubernetes 简介:Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful)。 点击此处查看官网详情。...

MrPei
30分钟前
1
0
关于scala macro的example

http://www.bbartosz.com/blog/2016/09/24/fun-with-scalameta-examples-part1/

Littlebox
32分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部