c++ 函数声明 与 定义 形参区别
2013-11-20 13:19
204 查看
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;
}*/
};
把函数声明 直接放到每个使用该函数的源文件中,这是大家希望的方式,也是合法的。但此法较呆板 易出错。解决的方法是把函数声明放在头文件中,这样可以确保对于指定函数其所有的声明保持一致。 如果函数接口发生变化,只要修改其唯一的声明即可。
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;
}*/
};
把函数声明 直接放到每个使用该函数的源文件中,这是大家希望的方式,也是合法的。但此法较呆板 易出错。解决的方法是把函数声明放在头文件中,这样可以确保对于指定函数其所有的声明保持一致。 如果函数接口发生变化,只要修改其唯一的声明即可。
相关文章推荐
- c++ 中默认参数的函数声明和定义的注意事项
- 类成员声明与定义前加inline的区别(C++ inline 函数)
- c++带默认参数的函数的声明、定义及使用总结
- C/C++_log2000_函数声明与指针定义等零散知识点随手笔记
- C++中的函数定义、声明、调用
- C++ 变量和函数的声明和定义
- C++ 变量和函数的声明和定义
- C++中重构函数声明定义与static变量使用方法
- C++ 变量和函数的声明和定义
- c++中函数只声明,不定义(不调用该函数)可以通过编译并运行
- C++:如何声明和定义成员函数
- c++ 在类体外定义的成员函数,函数体的左括号提示:error 应输入声明
- c++声明/定义,静态/非静态,变量/函数
- C++中,函数声明时指针、引用相关的语义,定义方法原型时参考。
- C++中命名空间内只能声明函数,不能定义
- C++: 关于function的declaration与definition的关系(函数声明和定义的关系)(并附一篇转载文章)
- 学习笔记之C++为什么将函数声明或者类的定义放在.h文件中,而将其实现放在原文件中
- C++变量和函数的声明和定义
- C++: 为什么我们一般都要将函数的声明和定义分开?(separate the declaration of function from its definition)
- 在C中用struct实现C++中class的函数声明和定义