zoukankan      html  css  js  c++  java
  • 类模板友元函数的声明

    模板类实现时与普通类实现时的差别

    1、类模板不支持分离编译,即类的声明与实现应写在同一个文件中(实践所得,调试很久才发现这个错误);

    2、模板友元函数声明方法:(自己实现图数据结构时的一段代码)

    //定点类的声明; 
    template<typename T>class Vertex;
    // 友元函数的声明,友元的声明仅指明访问权限,并非通常意义的函数声明。为对类的使用者可见,每个函数需要单独声明。 
    template<typename T>
    bool operator==(const Vertex<T>&,const Vertex<T>&);
    template<typename Tv>
    istream& operator >>(istream&input, Vertex<Tv>&a);
    template<typename Tv>
    ostream& operator<<(ostream&output,const Vertex<Tv>&a);
    
    typedef enum {undiscovered,discovered,unvisited,visited} s;
    
    //定义顶点类vertex;
    template<typename Tv>class Vertex 
    {
        public:
    Vertex():data(0),status(undiscovered){}
    Tv getData()
        {
        return data;
    }
    void setData(Tv data_)
        {
        data=data_; 
    }
    void diff(const Vertex<int>&a)
        {
        cout<<a.data;
        cout<<*this; 
    }
    private:
    Tv data;
    s status;
    
    //友元的声明 
    friend bool operator==<Tv> (const Vertex<Tv>&a, const Vertex<Tv>&b);
    friend istream& operator >> <Tv>(istream&input, Vertex<Tv>&a);
    friend ostream& operator << <Tv>(ostream&output,const Vertex<Tv>&a);
    };
    
    //友元函数的实现;
    template<typename Tv>
    bool operator==(const Vertex<Tv>&a, const Vertex<Tv>&b) {
    return a.data == b.data;
    }
    
    template<typename Tv>
    istream& operator >>(istream&input, Vertex<Tv>&a) {
    input >>a.data;
    return input;
    }
    
    template<typename Tv>
    ostream& operator<<(ostream&output,const Vertex<Tv>&a) {
    output << a.data;
    return output;
    }
    
    如有不当,欢迎指正 :)
  • 相关阅读:
    如何用js得到当前页面的url信息方法(JS获取当前网址信息)
    可拖动大小div案例
    div内div水平垂直居中
    div设置absolute情况下填充剩余宽度
    最近很不顺
    [转载]什么是对象序列化,为什么要使用
    mac下安装eclipse以及python
    Myeclipse 10 for mac 破解版下载安装及破解方法
    IOS7学习之路一(新UI之自定义UITableViewCell)
    Xcode5和ObjC新特性
  • 原文地址:https://www.cnblogs.com/lif323/p/6984807.html
Copyright © 2011-2022 走看看