c++带有模板的类,它的方法只能实现在.h里吗?
其实这个说法,不完全正确。不是声明一定要写在.h中。这个和CPP的编译原理相关:1 编译器以源文件(cpp)文件为编译主体。简单来说,一个CPP文件会对应一个编译目标文件(.obj文件)。
但是C#中定义和实现是都在一个文件中(其实都是在类里面),而使用C 的时候也只是编程的刚刚起步,所写的程序也只要一个文件就够了。因此对于C++的Package 理解以及.h 文件和.cpp 文件的总是心存纠结。
此外,一些实现上也有不小的区别,例如标准输入输出(包含iostream)使用了类模板,而早期的库iostream.h中可能被简单地实现为class。
不过要是用VC++写类模板有个问题——不能够分离编译,即类的头文件(.h)和源文件(.cpp)不可以分开,而C++一般是强调分离编译,在头文件声明,源文件实现的。
C++中如何在类模板外定义函数
1、方法一---编写level 2的s-function:这种方法比较常见,首先从help里找到s-function level 2的模板,在output函数中写下您的算法,当然这里要特别注意你的算法有多少输入输出,在s-function中也要一致。
2、public:void input(T x);…}表示定义一个名为Smemory的类模板,其中带类型参数T。
3、你这叫类的成员函数matT:operator*(const double, matT&),而类的声明中并没有这样一个函数,所以报错。
4、private和public函数在类外定义的方式是一样的,都是:返回类型 类名:函数名(参数列表)。
5、函数定义好以后,要被其它函数调用了才能被执行。C 语言的函数是能相互调用的,但在调用函数前,必须对函数的类型进行说明,就算是标准库函数也不例外。
C++中,有关调用外部模板类函数的问题。
模板类的声明和函数体必须都放在头文件中。否则编译器在实体化的时候没办法根据模板参数来确认实体部分的代码。这是规则。
在Ac中有完整的函数定义,在Ac中添加一下要用到的函数原型(声明)就可以了,例如:在Ac中:有函数void A2(){...};。在Ac中:在文件前头增加一行:void A2();就可以了。
所谓函数模板实际上是建立一个通用函数,其涵涵素类型额形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板。
C 语言的函数是能相互调用的, 但在调用函数前,必须对函数的类型进行说明,就算是标准库函数也不例外。
在使用的时候创建个A类的实体 b b.A()就可以调用了 你问的问题很基础啊。
为什么只包含头文件就可以使用头文件中声明的函数
头文件的函数的实现文件都在其他文件中,比如VC++就是在那些.LIB和.DLL文件中。这样可以把实现文件转化为LIB和DLL,就可以保护你的源代码。而只留出来头文件,给别人看,别人用头文件作为接口,调用LIB或者DLL中的函数。
包含头文件后,C编译器,会根据你所用到的头文件去链接相应的系统函数库。这样就可以实现相应的函数调用了。这是编译(暗中)做的事,开发者看不到。
如果是系统头文件,那么只要引用头文件就行。如果是别人写的SDK ,可能用到lib或dll文件,那就需要在项目属性中包含那些文件。如果是自己写的头文件,那肯定还有一个cpp文件用于对函数方法的实现。