首页 > 代码库 > 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++中的链表节点用模板类和用普通类来实现的区别
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。