软件设计课件:Lecture 12 CPP Template.pptVIP

  • 6
  • 0
  • 约1.15万字
  • 约 47页
  • 2021-11-30 发布于安徽
  • 举报
fig22_02.cpp (Part 2 of 2) Program Output Pushing elements onto doubleStack 1.1 2.2 3.3 4.4 5.5 Stack is full. Cannot push 6.6 ? Popping elements from doubleStack 5.5 4.4 3.3 2.2 1.1 Stack is empty. Cannot pop ? Pushing elements onto intStack 1 2 3 4 5 6 7 8 9 10 Stack is full. Cannot push 11 ? Popping elements from intStack 10 9 8 7 6 5 4 3 2 1 Stack is empty. Cannot pop Can use non-type parameters in class templates 可以是常整数(包括枚举)、指向外部链接对象的指针,而浮点数,指向内部链接对象的指针则不行。 must be constant at compile time Example: Template class T, int elements Stack double, 100 mostRecentSalesFigures; Defines object of type Stack double, 100 Template parameters Non-type parameters are resolved at compile time, not runtime Example: This may appear in the class definition: Template class T, int elements T stackHolder[ elements ]; //array to hold stack The array is created at compile time, rather than dynamic allocation at execution time Template parameters Template parameters Class templates can have default arguments for type or value parameters. template class T = long class A; Function templates CANNOT have default arguments Classes can be overridden For template class Array, define a class named ArraymyCreatedType This new class overrides the class template for myCreatedType The template remains for unoverriden types Class template specialization 应用场景:即想使用模板,同时又需要对一个特殊类型做不同的实现。 // class template: template class T class specTemplate { T m_var; public: specTemplate (T inData) { m_var = inData; } T increase () { return ++m_var; } }; // class template specialization: template class specTemplate char { char m_var; public: specTemplate (char arg) { m_var = arg; } char upperCase () { if ((m_var = ’a’) (m_var = ’z’)) m_var += ’A’-’a’; return m_var; } } ; Class templates specialization A non-template class can be derived from a template class (普通类继承模板类) A template class

文档评论(0)

1亿VIP精品文档

相关文档