首页 > 代码库 > C++中的链表节点用模板类和用普通类来实现的区别

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

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= http://www.mamicode.com/"<<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= http://www.mamicode.com/" << a << endl;    system("pause");    return 0;}

 

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