`
kmplayer
  • 浏览: 508934 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

条款41:区分inheritance和template

 
阅读更多
1,首先考虑一个问题:
型别T会影响class的行为吗?
如果不影响,你可以使用template.
如果影响,你必须使用虚拟函数,并因而使用继承机制.

2,来看一个模版的实例:
#include <iostream>
using namespace std;

template<class T>
class Stack
{
public:
    Stack();
    void push(const T& t);
    T& pop();
    T& top();
    bool empty();
    int size();
    ~Stack();
private:
    struct StackNode
    {
        StackNode(const T& t, StackNode *nextNode) : data(t),next(nextNode){}
        T data;
        StackNode* next;
    };
    StackNode* head;
    int cnt;
    Stack(const Stack&);
    Stack& operator=(const Stack&);
};

template<class T>
Stack<T>::Stack() : head(NULL),cnt(0) {}

template<class T>
void Stack<T>::push(const T& t)
{
    head = new StackNode(t, head);
    cnt++;
}

template<class T>
T& Stack<T>::pop()
{
    if (!empty())
    {
        StackNode* tmp = head;
        head = head -> next;
        T tmpData = tmp -> data;
        delete tmp;
        cnt--;
        return tmpData;
    }
}

template<class T>
T& Stack<T>::top()
{
    if (!empty())
        return head -> data;
}

template<class T>
bool Stack<T>::empty()
{
    return head == NULL;
}

template<class T>
int Stack<T>::size()
{
    return cnt;
}

template<class T>
Stack<T>::~Stack()
{
    while (head)
    {
        StackNode* tmp = head;
        head = head -> next;
        delete tmp;
    }
}

int main()
{

    Stack<int> myStack;
    myStack.push(20);
    myStack.push(30);
    myStack.push(40);
    cout << myStack.pop() <<endl;
    cout << myStack.size() <<endl;
    cout << myStack.top() <<endl;

    return 0;
}

3,总结:
template用来产生一群class,其中对象型别不会影响class的函数行为.
inheritance用于一群class身上,其中对象型别会影响class的函数行为.
分享到:
评论

相关推荐

    Effective C++(第三版)

    条款41:了解隐式接口和编译期多态 understand implicit interfaces and compile-time polymorphism. 条款42:了解typename的双重意义 understand the two meanings of typename. 条款43:学习处理模板化基类内的...

    操作系统之死锁处理算法:Priority Inheritance.zip

    操作系统之死锁处理算法

    Effective C++ 中文版

    条款34:区分接口继承和实现继承 条款35:考虚virtual函数以外的其他选择 条款36:绝不重新定义继承而来的non-virtual函数 条款37:绝不重新定义继承而来的缺省参数值 条款38:通过复合塑模出has-a或“根据某物...

    C 程序设计教学课件:CHAPTER 8 INHERITANCE.ppt

    5. **8.5 Constructors and Destructors Under Inheritance** - 在继承中,派生类可以调用基类的构造函数和析构函数,以确保正确初始化和清理资源。 6. **8.6 Name Hiding** - 名称隐藏意味着派生类可以重新定义...

    C程序设计教学课件:CHAPTER8INHERITANCE.pptx

    - 公开继承(Public Inheritance):基类的公有成员和受保护成员在派生类中仍然是公有和受保护的。私有成员仍然仅在基类中可见。 - 私有继承(Private Inheritance):基类的公有和受保护成员在派生类中变为私有的,...

    yii2-activerecord-inheritance:ActiveRecord Inheritance是为Yii2框架提供类表继承模式的实用程序

    ActiveRecord Inheritance是为Yii2框架提供的实用程序。 其动机是在两个ActiveRecord类之间伪造继承。 安装 将程序包作为依赖项包含在bower.json文件下。 要安装,请运行 $ ...

    inheritance

    "93317446inheritance"可能是一个源代码文件,根据命名习惯,可能是该项目的主要或核心实现文件,包含了遗传算法的具体逻辑和实现。 在C语言中实现遗传算法可能会涉及到以下知识点: 1. 结构体:由于C语言不直接...

    C++程序设计教学课件:CHAPTER 8 INHERITANCE.ppt

    在C++编程中,继承(Inheritance)是面向对象编程的一个核心概念,它允许我们创建新的类(派生类)时基于已经存在的类(基类)。这种机制使得基类的特性被派生类继承,从而实现代码重用并表达程序组件间的自然关系。...

    面向对象程序设计英文教学课件:10_Inheritance.ppt

    在本课件“10_Inheritance.ppt”中,重点讲解了面向对象编程中的继承(Inheritance)这一关键知识点。继承是OOP的基石之一,它促进了软件的复用,使得代码更加模块化和高效。 继承的基本思想是,我们可以将一个类视...

    面向对象程序设计英文教学课件:10-Inheritance.pptx

    面向对象程序设计(Object-Oriented Programming,OOP)是一种重要的编程范式,它通过类和对象的概念,以及封装、继承和多态等核心特性,实现了代码的复用和模块化。在本教学课件“10-Inheritance.pptx”中,主要...

    Wrox.Beginning Visual C++ 2008

    Chapter 9: Class Inheritance and Virtual Functions Chapter 10: The Standard Template Library Chapter 11: Debugging Techniques Chapter 12: Windows Programming Concepts Chapter 13: Windows Programming...

    关于面向对象的哲学体系及科学体系的探讨(PDF)

    用中国式思维理解面向对象,pdf格式,内容包含:目彔 Catelog序言 Perface真经第一章:世界 Waltanschauung真经第二章:抽象 Abstraction真经第三章:层次 Arrangement真经第四章:继承 Inheritance真经第亐章:...

    Inheritance

    继承是面向对象编程中的核心概念之一,它允许开发者从已有的类(父类或超类)派生出新的类(子类或派生类),以此来实现代码的复用和扩展。在Java编程语言中,继承通过关键字`extends`来实现。这种机制创建了“is-a...

    Premier.Press.C++.Programming.for.the.Absolute.Beginner.2001.chm

    Chapter 8: Introducing Inheritance Chapter 9: Using Templates Chapter 10: Using Streams and Files Chapter 11: Errors and Exception Chapter 12: Programming with Windows Chapter 13: Using DirectX ...

    inheritance---derived-class.rar_inheritance

    "inheritance---derived-class.rar_inheritance"这个压缩包文件显然包含了关于C++继承和派生类的详细教程。 继承的概念在于,子类可以自动获取基类的所有公共成员(包括数据成员和成员函数),并且可以添加新的成员...

    Advanced JavaScript (closures,prototype,inheritance)

    JavaScript,作为一种广泛应用于Web开发的脚本语言,其高级特性如闭包(closures)、原型(prototype)和继承(inheritance)是理解其精髓的关键。本文将深入探讨这些概念,帮助开发者更好地掌握JavaScript的核心。 ...

    inheritance_art.zip

    10. **学习与实践**:"inheritance_art.zip"可能包含了具体的示例项目,帮助开发者通过实际操作理解继承的概念和应用。通过分析和修改这些示例,你可以加深对Godot中继承机制的理解,并提升游戏开发技能。 总之,...

    ACE-inheritance

    为了提高内存管理和数据存储的效率,ACE提供了一套完整的容器和内存管理类: - `ACE_Array`、`ACE_Bounded_Set`等:各种类型的数据容器,用于存储和管理数据元素。 - `ACE_Allocator`、`ACE_Cached_Allocator`等:...

Global site tag (gtag.js) - Google Analytics