考虑一个存储一堆Date对象的类Calendar.日历旨在保存从Date继承的任何类型的对象的集合.我认为最好的方法是使用类模板,例如
template<typename D> class Calendar{
...
}
Run Code Online (Sandbox Code Playgroud)
但让我感到震惊的是,D现在实际上可以成为任何阶级.我现在的问题是,如何确保D是日期对象的子类?
我知道如何做到这一点是Java,但我仍然不熟悉C++语法.问题非常类似于某些集合只能采用实现Comparable的模板变量.然后标题看起来像
public class Calendar<D extends Date>{
...
}
Run Code Online (Sandbox Code Playgroud)
--------------------编辑:---------------------------- --------------
template参数定义日历引用的实际日期.不同的日期类型以不同的格式表示同一天.例如,如果我制作了Calendar<Gregorian>它,它将能够以其他Date格式拍摄日期,比如朱利安日历或任何其他日期格式,并以格里高利格式呈现它们.这样可以在不同日期格式的日历之间进行转换.所以,如果我有一个Calendar<Gregorian>我可以轻松地将其转换为Calendar<Julian>.那么以下是可能的:
Calendar<Gregorian> cal;
std::cout << "These events are entered as dates in
the Gregorian calendar" << std::endl;
cal.add_event("Christmas", 12, 25);
cal.add_event("Gregorian new year", 1, 1);
std::cout << cal << std::endl;
std::cout << "----" << std::endl;
std::cout << "And printed out as Julian dates" << std::endl;
Calendar<Julian>(cal);
std::cout << cal<< std::endl;
Run Code Online (Sandbox Code Playgroud)
和输出:
These events are …Run Code Online (Sandbox Code Playgroud)