类模板

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. ES6躬行记(8)——数字

    一.进制 ES6不仅完善了数字的八进制形式,还补充了一种十六进制形式,并且添加了全新的二进制形式.下面的三个变量分别表示八进制.十六进制和二进制的10,注释中给出了该进制的另一种写法. var oct ...

  2. 结构型---适配器模式(Adapter Pattern)

          适配器模式——把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作.适配器模式有类的适配器模式和对象的适配器模式两种形式,下面我们分别讨论 ...

  3. Prism 学习:从本地目录加载 Module

    在 Prism 中,将外部模块加载到主程序有以下几种方式:Code.XAML.配置文件.指定模块目录:其中,如果要使用 Code 方式来加载 Module,则需要将该 Module 引用到当前项目中: ...

  4. JSJ—编译器与虚拟机哪个重要?

    阅读本文约“2分钟” 熟悉Java的朋友都知道虚拟机还有编译器,那么它们各自主要的功能是什么?谁比较重要呢?让我们来了解一下这两位美女的故事. 虚拟机可以说就是Java,她能让程序运行起来. 但是编译 ...

  5. Stackoverflow每日问题 系列前言

    都是程序员,想必都对stackoverflow有一定的了解,这个网站是世界上最为活跃的编程知识的论坛网站,上面活跃着数以万计的大神.提问各种有意义有价值的问题,还有这些问题的详细的回答. 但是毕竟是国 ...

  6. kafka指定partition的分区规则

    博客地址:https://www.cnblogs.com/gnivor/p/5318319.html

  7. unable to locate nuget.exe

    今日使用vs 从github fork 一份代码到本地之后,提示项目 unable to locate nuget.exe. 原因:代码托管时未提交 nuget.exe 或其他原因丢失 解决方法:在解 ...

  8. canvas-9NonZeroAroundPrinciples.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. CSS概念【记录】

    1.CSS语法 2.@规则 3.注释 4.层叠 5.优先级 6.继承 7.值 8.块格式化上下文 9.盒模型 10.层叠上下文 11.可替换元素 12.外边距合并 13.包含块 14.视觉格式化模型 ...

  10. 《锋利的jQuery》笔记:插件的使用和写法

    jQuery插件的种类 1.封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进行操作,是最常见的一种插件.此类插件可以发挥出jQuery选择器的强大优势,有相当一部分 ...