• c++ 函数声明 与 定义 形参区别


    ofstream &operator<<(ofstream& ,const Gra_adjmul<T,E> &);  声明

    ofstream &operator<<(ofstream&s ,const Gra_adjmul<T,E> & G)

    {。。}; 定义

    变量必须先声明后使用,函数也必须在调用前先声明。与变量的定义类似,函数的声明也可以与定义分离。一个函数只能被定义一次,但声明可多次。

    函数声明由 函数返回类型,函数名,形参列表 组成。形参列表必须包括形参类型,但是不必对形参命名。 

    这3个元素称为函数原型(function prototype),函数原型为定义函数的程序员和使用程序的程序员定义了接口。

    函数声明中形参名会被忽略, 如果在生命中给出形参的名字,它应该当做辅助文档

    template<class T,class E>
    class Gra_adjmul;     //类声明,下面的函数声明的形参类型用到。
    template<class T,class E>
    std::ifstream& into(std::ifstream& ,const Gra_adjmul<T,E> & );
    template<class T,class E>
    ofstream & outfrom(ofstream& ,const Gra_adjmul<T,E> &);  //声明为友元前,应先声明函数模板。

    template<class T,class E>

    class Gra_adjmul//:public Graph<T,E>
    {

    friend ifstream &operator>>(ifstream& ,const Gra_adjmul<T,E> & );
    friend ofstream &operator<<(ofstream& out,Gra_adjmul<T,E> &G);


    public:
    ifstream & into(ifstream& in );
    ofstream & outfrom(ofstream& out);
    Gra_adjmul(int sz=DefaultVertices)
    {
    Nodet=new Vertex<T,E>[sz];
    numV=0;numE=0;maxV=sz;numW=0;
    //cout<<maxV<<endl;
    if (Nodet==NULL){cerr<<"分配内存错误!"<<endl; exit(1);}
    for (int i=0;i<maxV;i++)
    {
    Nodet[i].firstin=NULL;
    Nodet[i].firstout=NULL;
    }
    }
    ~Gra_adjmul();
    T getValue(int i)
    {
    return (i>=0&&i<numV)?Nodet[i].data:0;
    }
    E getWeight(int v1,int v2);
    int NumOfVertices(){return numV;}
    int NumOfEdges() {return numE;}
    int NumW() {return numW;}
    bool insertVertex(const T& vertex,int c);
    bool removeVertex(int v);
    bool insertEdge(int ,int );                       //声明 ,形参名不必写、
    bool removeEdge(int ver1,int ver2);     //形参名 用作辅助文档
    int getFirstout(int ver);
    int getNextin(int ver,int w);
    int getVertexPos(const T &ver)
    {
    for(int i=0;i<numV;i++)
    if(Nodet[i].data==ver) return i;
    return -1;
    }
    private:
    Vertex<T,E> *Nodet;
    int maxV;
    int numE;
    int numV;
    int numW;
    /*int getVertexPos(const T &ver)
    {
    for(int i=0;i<numV;i++)
    if(Nodet[i].data==ver) return i;
    return -1;
    }*/
    };

    把函数声明 直接放到每个使用该函数的源文件中,这是大家希望的方式,也是合法的。但此法较呆板 易出错。解决的方法是把函数声明放在头文件中,这样可以确保对于指定函数其所有的声明保持一致。 如果函数接口发生变化,只要修改其唯一的声明即可。

  • 相关阅读:
    内置函数(十)
    常用命令
    函数式编程(九)——map,filter,reduce
    函数(八)-函数和匿名函数
    设计模式(十三)——观察者模式
    Confluence 6 重要缓存和监控
    Confluence 6 数据中心的缓存
    Confluence 6 配置文件和key
    Confluence 6 缓存性能示例
    Confluence 6 缓存性能优化
  • 原文地址:https://www.cnblogs.com/xaf-dfg/p/3418396.html
Copyright © 2020-2023  润新知