例:文件test1.cpp有类class A文件test2.cpp有类class B.
如在test2.cpp中想用A:
#include "test1.cpp"
1. a = new A,即可用a去访问A中提供的接口
2. A *a = new A;同样达到目的
当然一般的做法是将类的声明放在.h文件里,定义放在.cpp文件,然后可以直接在B类中保存一个A类的指针,那样即可实现使用A类了。
C++,这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
它是“C Plus Plus”的简称。是继C语言之后又一种计算机编程语言,C++编程语言同时支持所有的C语言语法。C++和C相似:但C是面向过程的程序设计语言,而C++是面向对象的程序设计语言,不过C++语言保持了对C语言的兼容,也就说是在C++程序可以不用修改的插入C语言代码。
cpp是用C++语言编写的源代码文件的后缀名。它对类的强大支持可以使它编写出更优质的程序。
因为C++和C是两种完全不同的编译链接处理方式,所以如果直接在C++里面调用C函数,这样链接起来是通不过的,会报链接错误,找不到函数体,所以要在C++文件里面显示声明以下一些函数是C写的,要用C的方式来处理,这个在C++设计初期就考虑到兼容性的问题,所以是可以解决的。 比如用C写了A.h和A.c这两个文件,里面包括了void A_app(int)这样的函数,那么在需要调用这个函数的CPP文件里面,就需要显示声明一下了。 1.引用头文件前需要加上 extern “C”,如果引用多个,那么就如下所示 extern “C” { #include “A.h” #include “B.h” #include “C.h” #include “D.h” } 然后在调用这些函数之前,需要将函数也全部声明一遍。 2.C++调用C函数的方法,将用到的函数全部重新声明一遍 extern “C” { extern void A_app(int)extern void B_app(int)extern void C_app(int)extern void D_app(int)}在实际工作中可能经常要进行C和C++的混合编程,C++调用C语言的代码通常都比较容易,但也有一些细节需要注意。C要调用C++的代码就略为麻烦一些,因为C不支持面向对象的特征。 1,首先我们来看一下C++调用C语言的代码。要让你的C代码既能被C代码又能被C++调用虽说容易,但是还是有需要注意的地方。现有三个文件分别如下:[cpp]#ifndef TESTC_H#defineTESTC_H#ifdef__cplusplus //2个下划线extern"C"{#endifintadd(inta, intb)#ifdef__cplusplus}#endif#endif[cpp]#include "TestC.h"intadd(inta, intb){return(a+b)}[cpp]#include#include"TestC.h"intmain(){printf("add=%d\n" ,add(2,5))return0}说明: file TestC.h是C的头文件,file TestC.c是其实现文件,file TestCpp.cpp是调用C函数的C++文件。文件TestC.h中的TESTC_H定义是为了头文件保护,”#ifdef__cplusplus ”这个不能缺少,你可以去查看C的标准库头文件中都有这个,如”stdio.h”。有了这个宏编译器就知道现在是C还是C++在调用它。 C编译器编译后在符号库中的名字为_add,而C++编译器则会产生像_add_int_int之类的名字。C++正是依靠这种机制实现了函数的重载。 extern关键字表示将函数或变量声明为全局类型,与之相对应的是static。static限定函数或变量的作用域为本文件。extern还有一个作用就是与”C”连在一起使用,即extern“C”通知编译器将extern “C”所包含的代码按照C的方式编译和链接。 intb){return(a+b)}}将C++类封装为C函数的文件(为了简略也将声明和实现放在了同一个文件中)如下:[cpp]#include"TestClass.h"extern"C"intadd_cpp(inta, intb)intadd_cpp(inta, intb){ADDsreturn s.add(a,b) } 实际调用C++代码的C文件如下:[cpp]#includeexternintadd_cpp(inta, intb)intmain(){printf("add_cpp=%d\n" ,add_cpp(2,5))return0} 上面的过程很清晰,就是用一个函数将C++类的使用封装起来,然后将它外部声明为C函数就可以了。文件TestClass.h定义并实现了一个类,该类只有一个add方法。文件TestCpp.cpp定义并实现了一个函数add_cpp,函数中定义了一个HJH类对象并调用了该对象的add方法。然后将add_cpp函数进行外部声明为C。 TestC.c文件中为了使用add_cpp函数,也需要进行外部声明。这是为了通知编译器说明这个函数是在其他文件中实现(注意在C文件中的extern后面不可加”C” )。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)