zoukankan      html  css  js  c++  java
  • 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;
    }*/
    };

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

  • 相关阅读:
    Eureka获取服务列表源码解析
    Eureka客户端续约及服务端过期租约清理源码解析
    Eureka应用注册与集群数据同步源码解析
    Eureka重要对象简介
    EurekaClient自动装配及启动流程解析
    idea2019注册码
    EurekaServer自动装配及启动流程解析
    程序员的算法课(5)-动态规划算法
    程序员的算法课(4)-二分查找
    程序员的算法课(3)-递归(recursion)算法
  • 原文地址:https://www.cnblogs.com/xaf-dfg/p/3418396.html
Copyright © 2011-2022 走看看