d语言类的继承
d语言类的继承
轻舞凋零 发表于2年前
d语言类的继承
  • 发表于 2年前
  • 阅读 32
  • 收藏 0
  • 点赞 1
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: d语言类的继承

参考自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);
	
}

 

共有 人打赏支持
粉丝 14
博文 99
码字总数 16794
×
轻舞凋零
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: