类模板

1,模板类里的函数都是模板函数

2,模板类里的函数,在类外面实现的时候,要用模板函数(方法:push_back)的方式实现,在类内部实现时,不需要用模板函数(方法:show)方式实现。

3,用模板类实现单链表,类List是类ListNode的友元类;用友元函数重载了类Value的<<函数;显示链表的show方法在类外面定义的部分注释掉了。

4,在gcc4.8.5-20下,如果把ListNode和List的声明放到.h文件,把实现放在.cpp后,编译无法通过。但是把ListNode和List的声明和实现都放到.h文件,就可以编译通过。完整代码

编译方法:g++ -g template_main.cpp

分割线==============

下面的例子,为了简单起见,都放到了一个cpp文件了。

#include <iostream>
using namespace std; template<typename A>
class List; //节点
template<typename A>
class ListNode{
friend class List<A>;
public:
ListNode():data(A()), next(NULL){}
ListNode(A a, ListNode *n) : data(a), next(n){}
private:
A data;
ListNode *next;
}; //单链表
template<typename A>
class List{
public:
List();
//尾插
bool push_back(A val);
//显示链表
void show()const{
ListNode<A> *n = first->next;
while(NULL != n){
cout << n->data;
n = n->next;
}
cout << "NULL" << endl;
}
private:
ListNode<A> *first;
ListNode<A> *last;
size_t size;
}; template<typename T>
List<T>::List(){
first = last = new ListNode<T>;
last->next = NULL;
size = 0;
}
//尾插
template<typename A>
bool List<A>::push_back(A value){
ListNode<A> *node = new ListNode<A>;
if(NULL == node) return false;
node->data = value;
node->next = NULL; last->next = node;
last = node;
size++; return true;
}
//显示链表
/*
template<typename A>
void List<A>::show()const{
ListNode<A> *n = first->next;
while(NULL != n){
cout << n->data;
n = n->next;
}
cout << "NULL" << endl;
}
*/
class Value{
friend ostream& operator<<(ostream &o, const Value &v);
public:
Value(int d = 0) : value(d){}
private:
int value;
};
ostream& operator<<(ostream &o, const Value &v){
o << v.value << "->";
return o;
} int main(){
List<Value> l;
for(int i = 0; i < 10; ++i){
l.push_back(Value(i));
}
l.show();
}

c/c++ 类模板初探的更多相关文章

  1. c++类模板初探

    #include <iostream> #include <string> using namespace std; // 你提交的代码将嵌入到这里 ; template &l ...

  2. 28.C++- 单例类模板(详解)

    单例类 描述 指在整个系统生命期中,一个类最多只能有一个实例(instance)存在,使得该实例的唯一性(实例是指一个对象指针)  , 比如:统计在线人数 在单例类里,又分为了懒汉式和饿汉式,它们的区 ...

  3. 智能指针类模板(上)——STL中的智能指针

    智能指针类模板智能指针本质上就是一个对象,它可以像原生指针那样来使用. 智能指针的意义-现代C++开发库中最重要的类模板之一-C++中自动内存管理的主要手段-能够在很大程度上避开内存相关的问题 1.内 ...

  4. C++中的单例类模板

    1,本节课讲述单例类模式,实现并抽取相关代码实现单例类模板,在以后开发工作 中,如果想要使用单例模式,那么直接使用今天开发的单例类模板就可以: 2,需求的提出: 1,在架构设计时,某些类在整个系统生命 ...

  5. C++中的智能指针类模板

    1,智能指针本质上是一个对象,这个对象可以像原生的指针一样使用,因为智能指 针相关的类通过重载的技术将指针相关的操作符都进行了重载,所以智能指针对象可以像原生指针一样操作,今天学习智能指针类模板,通过 ...

  6. C++STL - 类模板

    类的成员变量,成员函数,成员类型,以及基类中如果包含参数化的类型,那么该类就是一个类模板   1.定义 template<typename 类型形参1, typename 类型形参2,...&g ...

  7. C++ 类模板的使用

    从事C++挺久了,在前段时看书时,发现高手,都是在写模板无,泛型编程,顿感差距.自己连模板都没有写,于是就小小的研究了下模板的用法. 模板简而言之就是对某此对象的相同方法,或处理方式,进行归纳,总结, ...

  8. Xcode6中如何使用自定义的类模板

    说到IOS类的模板,有些人感觉很陌生,但是只要有开发过IOS程序的人,其实都用过类的模板,只不过是用的系统自带的类的模板. 例如创建一个ClassTemplateVC继承于UIViewControll ...

  9. VS2013,VS2015设置类模板文件表头

    一般VS的类模板文件是放在C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplatesCache\CSha ...

随机推荐

  1. 浅谈ASP.NET框架

       本篇文章更适合具有一定开发经验,一定功底,且对底层代码有所研究的朋友!!! 本篇文章稍微偏原理且底层,有一定难度和且比较晦涩,文章粒度稍微粗些,更细粒度的,会在后续的文章中,结合具体的Demo实 ...

  2. Perl的浅拷贝和深度拷贝

    首先是深.浅拷贝的概念: 浅拷贝:shallow copy,只拷贝第一层的数据.Perl中赋值操作就是浅拷贝 深拷贝:deep copy,递归拷贝所有层次的数据,Perl中Clone模块的clone方 ...

  3. Shuffle过程

    Shuffle过程 在MapReduce框架中,shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整 ...

  4. Python图像处理之验证码识别

      在上一篇博客Python图像处理之图片文字识别(OCR)中我们介绍了在Python中如何利用Tesseract软件来识别图片中的英文与中文,本文将具体介绍如何在Python中利用Tesseract ...

  5. npm install 失败

    总结列表: 1. There is already an open DataReader associated with this Connection which must be closed fi ...

  6. [转]分别使用Node.js Express 和 Koa 做简单的登录页

    本文转自:https://blog.csdn.net/weixin_38498554/article/details/79204240 刚刚学了Koa2,由于学的不是很深,并没有感受到网上所说的Koa ...

  7. 第一册:lesson ninety-three。

    原文:  our new neighbor. Nigel is our new next-door neighbor. He is a pilot. He was in the R.A.F. He w ...

  8. sublime text 安装nodejs开发插件

    系统:windows10nodejs版本:v6.1.14 请先配置好环境变量,这里就不说啦. 下载并设置nodejs插件 下载地址为https://github.com/tanepiper/Subli ...

  9. Thinkphp table doesn't exist

    系统采用Tp3.2的改造....集群为Mysql双工模式:平时M()主要是操作写,MS操作读...今天在查询 $res =MS("user u")->join("{ ...

  10. Spring核心——Bean的定义与控制

    在Sring核心与设计模式的文章中,分别介绍了Ioc容器和Bean的依赖关系.如果阅读过前2文就会知道,Spring的整个运转机制就是围绕着IoC容器以及Bean展开的.IoC就是一个篮子,所有的Be ...