码迷,mamicode.com
首页 > 编程语言 > 详细

C++中的链表节点用模板类和用普通类来实现的区别

时间:2014-12-06 22:50:04      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   os   sp   数据   div   log   

C++中的链表节点通常情况下类型都是一致的.因此我们可以用模板来实现.

#include <iostream>
using namespace std;

template<typename Type>//定义一个模板类必须有的声明
class LinkNode    //表示链表节点的类
{
public:
    LinkNode() :m_pnext(nullptr){}//构造函数,在函数体内实现的相当于默认在前面加了inline关键字修饰
    LinkNode(Type item, LinkNode* next=nullptr) :m_data(item), m_pnext(next){}//带默认参数的构造函数
    ~LinkNode(){ m_pnext = nullptr;}

    Type getData(){ return m_data; }//注意返回值类型,必须写上Type,要明确

    friend ostream& operator<<(ostream& out, LinkNode& node)//友元函数重载操作符,可以在类里面实现,也可以在类外面实现,
    {
        out << node.m_data;
        return out;
    }

    //friend ostream& operator<< <Type>(ostream& out, LinkNode& node)//在类外面实现友元函数,用于操作符重载时,必须明确类型,即<Type>不能少,否则报错
    

private:
    Type m_data;
    LinkNode* m_pnext;//所有的LinkeNode后面都可以省略<Type>,因为这在一开始的类前面就定义了LinkeNode为模板类,默认就是和上面的类型一致
};

//template<typename Type>
//ostream& operator<<(ostream& out, LinkNode<Type>& node)//在类的外边实现友元函数,注意在类里面声明时,需要明确类型operator<< <Type>(),否则报错
//{
//    out << node.m_data;
//    return out;
//}

int main()
{
    LinkNode<int> c;
    LinkNode<int> a(3,&c);
    cout << "a.m_data= "<<a << endl;

    system("pause");
    return 0;
}


2.如果不用类模板,就可以很简单了,比如我们用int类型:

#include <iostream>
using namespace std;

struct LinkNode{
public:
    LinkNode() :m_pnext(nullptr), m_data(0){}//用成员列表的方式来初始化构造函数,效率比在构造函数里面初始化高,m_data可以不用初始化,系统默认为0,但为了保险可以显示的初始化为0
    LinkNode(int num, LinkNode* next = nullptr) :m_data(num), m_pnext(next){}//带默认参数的构造函数
    ~LinkNode(){ m_pnext = nullptr; }

    int getData(){ return m_data; }

    friend ostream& operator<<(ostream& out, LinkNode& node);//友元函数,重载操作符,写在类里面和类外面都没有区别,没有模板那么麻烦,也不需要明确类型
    /*friend ostream& operator<<(ostream& out, LinkNode& node)
    {
        return out << node.m_data;
    }*/

private:
    int m_data;//数据域,明确为int
    LinkNode* m_pnext;//指针域

};

ostream& operator<<(ostream& out, LinkNode& node)
{
    return out << node.m_data;
}

int main()
{
    LinkNode c;
    //LinkNode b();//报错,没有与之对应的构造函数,要么写b(3),或者b(3,&c),要么省略()
    LinkNode a(3,&c);
    cout <<"a.m_data= " << a << endl;

    system("pause");
    return 0;
}

 

C++中的链表节点用模板类和用普通类来实现的区别

标签:style   blog   io   color   os   sp   数据   div   log   

原文地址:http://www.cnblogs.com/ttss/p/4148897.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!