混型

混型即混合多个类,以产生表示混合了所有类型的类。C++多重继承的目的是为了使用混型,但多重继承使得代码量越来越多,更灵活的方式是使用参数化类型组合特性——继承泛型参数,这样在添加泛型的同时达到继承泛型的特性的目的。

C++的混型
下面的实例可以为Basic添加时间戳TimeStamp和Id属性。

#include<iostream>
#include<time.h>
#include<string>
using namespace std;

template<class T>
class TimeStamp :public T {
private:
	time_t timeStamp;
public:
	TimeStamp() { timeStamp = time(0); }
	time_t getTime() { return timeStamp; }
};

template<class T>
class Id :public T {
private:
	int id;
	static int counter;
public:
	Id() { id = counter++; }
	int getId() { return id; }
};
template<class T>int Id<T>::counter = 0;

class Basic {
private:
	string name;
public:
	Basic() { name = "name"; }
	string getName() { return name; }
};


int main() {
	TimeStamp<Id<Basic>> mix;
	cout << "name:" << mix.getName() << endl
		<< "id:" << mix.getId() << endl
		<< "time:" << mix.getTime();
}

装饰器模式实现混型

接口和代理模式实现混型
C++可以记住模板类,但是Java由于擦除会忘记模板类类型,因此上述方法通过继承泛型参数添加的方法不可用。
Mix类继承自Basic同时实现了TimeStamp和Id接口,同时还具有相应实例的成员,并将成员方法包装在混型方法中,所以包含了基类的所有特性(成员与方法)。

interface TimeStamp{
    Time getTimeStamp();
}
interface Id{
    int getId();
}
interface Basic{
    String getName();
}

class TimpStampImp implements TimeStamp{
    private Time timeStamp;
    public TimpStampImp() { this.timeStamp = new Time(0); }
    public Time getTimeStamp() { return timeStamp; }
}

class IdImp implements Id{
    private static int counter=1;
    private int id=counter++;
    public int getId(){return id;}
}

class BasicImp implements Basic{
    String name;
    public BasicImp() { this.name = "Myname"; 
    public String getName() { return name; }
}

class Mix extends BasicImp implements Id,TimeStamp{
    private Id id=new IdImp();
    private TimeStamp timeStamp=new TimpStampImp();
    public Time getTimeStamp() { return timeStamp.getTimeStamp(); }
    public int getId() { return id.getId(); }

    public static void main(String[] args) {
        Mix mix=new Mix();
        System.out.println(mix.getName()+" "+mix.getId()+" "+mix.getTimeStamp());
    }
}
//output:
//Myname 1 08:00:00
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值