如何在一个cpp中调用另一个cpp中的类?

解决方案:新建一个同名头文件,将这个cpp中的类的声明放在头文件中,在这个cpp以及要调用的cpp中include这个头文件即可。


思路来源与原理:

在面向对象的程序开发中,一般做法是将类的声明(其中包含成员函数的声明)放在指定的头文件中,用户如果想用该类,只要把有关的头文件包含进来即可,不必在程序中重复书写类的声明,以减少工作量,节省篇幅,提高编程的效率。

由于在头文件中包含了类的声明,因此在程序中就可以用该类来定义对象。由于在类体中包含了对成员函数的声明,在程序中就可以调用这些对象的公用成员函数。为了实现上一节所叙述的信息隐蔽,对类成员函数的定义一般不放在头文件中,而另外放在一个文件中。
例如,可以分别写两个文件:
//student.h (这是头文件,在此文件中进行类的声明)
class Student //类声明
{
   public :
   void display( );//公用成员函数原型声明
   private :
   int num;
   char name[20];
   char sex;
};

//student.cpp
//在此文件中进行函数的定义
#include <iostream>
#include ″student.h″//不要漏写此行,否则编译通不过
void Student∷display()//在类外定义display类函数
{
   cout<<″num:″<<num<<endl;
   cout<<″name:″<<name<<endl;
   cout<<″sex:″<<sex<<endl; 
}

为了组成一个完整的源程序,还应当有包括主函数的源文件:
//main.cpp 主函数模块
#include <iostream>
#include ″student.h″ //将类声明头文件包含进来
int main( )
{
   Student stud;//定义对象
   stud.display( );//执行stud对象的display函数
   return 0;
}
这是一个包括3个文件的程序,组成两个文件模块:
一个是主模块main.cpp,
一个是student.cpp。
在主模块中又包含头文件student.h。在预编译时会将头文件student.h中的内容取代#include ″student.h″行。

请注意: 由于将头文件student.h放在用户当前目录中,因此在文件名两侧用双撇号包起来(″student.h″)而不用尖括号(<student.h>),否则编译时会找不到此文件。

图8.6。
在运行程序时调用stud中的display函数,输出各数据成员的值。

如果一个类声明多次被不同的程序所选用,每次都要对包含成员函数定义的源文件(如上面的student.cpp)进行编译,这是否可以改进呢?的确,可以不必每次都对它重复进行编译,而只需编译一次即可。把第一次编译后所形成的目标文件保存起来,以后在需要时把它调出来直接与程序的目标文件相连接即可。这和使用函数库中的函数是类似的。这也是把成员函数的定义不放在头文件中的一个好处。

在实际工作中,并不是将一个类声明做成一个头文件,而是将若干个常用的功能相近的类声明集中在一起,形成类库。
类库有两种:
  1. C++编译系统提供的标准类库;
  2. 用户根据自己的需要做成的用户类库,提供给自己和自己授权的人使用,这称为自定义类库。

在程序开发工作中,类库是很有用的,它可以减少用户自己对类和成员函数进行定义的工作量。

类库包括两个组成部分:
  1. 类声明头文件;
  2. 已经过编译的成员函数的定义,它是目标文件。

用户只需把类库装入到自己的计算机系统中(一般装到C++编译系统所在的子目录下),并在程序中用#include命令行将有关的类声明的头文件包含到程序中,就可以使用这些类和其中的成员函数,顺利地运行程序。这和在程序中使用C++系统提供的标准函数的方法是一样的,例如用户在调用sin函数时只需将包含声明此函数的头文件包含到程序中,即可调用该库函数,而不必了解sin函数是怎么实现的(函数值是怎样计算出来的)。

当然,前提是系统已装了标准函数库。在用户源文件经过编译后,与系统库(是目标文件)相连接。
在用户程序中包含类声明头文件,类声明头文件就成为用户使用类的公用接口,在头文件的类体中还提供了成员函数的函数原型声明,用户只有通过头文件才能使用有关的类。用户看得见和接触到的是这个头文件,任何要使用这个类的用户只需包含这个头文件即可。包含成员函数定义的文件就是类的实现。

请特别注意:类声明和函数定义一般是分别放在两个文本中的。由于要求接口与实现分离,为软件开发商向用户提供类库创造了很好的条件。

开发商把用户所需的各种类的声明按类放在不同的头文件中,同时对包含成员函数定义的源文件进行编译,得到成员函数定义的目标代码。软件商向用户提供这些头文件和类的实现的目标代码(不提供函数定义的源代码)。用户在使用类库中的类时,只需将有关头文件包含到自己的程序中,并且在编译后连接成员函数定义的目标代码即可。

由于类库的出现,用户可以像使用零件一样方便地使用在实践中积累的通用的或专用的类,这就大大减少了程序设计的工作量,有效地提高了工作效率。

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 在Qt,要调用一个cpp文件的变量,需要将该变量定义为全局变量或静态成员变量。 如果将变量定义为全局变量,在需要使用的cpp文件,可以使用extern关键字进行引用声明,以便将该变量引入到当前文件。例如,在需要使用另一个cpp文件的全局变量的cpp文件,可以这样声明: extern int global_variable; 这样就可以在该cpp文件使用global_variable变量了。 如果将变量定义为静态成员变量,可以通过指定该成员变量所属的名来访问。例如,在A.cpp文件定义了一个B和一个静态成员变量num: class B { public: static int num; }; int B::num = 0; 那么在其他的cpp文件,就可以通过B::num来访问该静态成员变量了。例如,在C.cpp文件,可以这样使用B::num: B::num++; 这样就可以对B的静态成员变量进行操作了。 需要注意的是,在使用变量之前,需要先包含该变量所在的头文件,以便让编译器知道该变量的型和定义。例如,在上述的例子,需要在C.cpp文件的开头添加: #include "A.h" 其A.h是包含B的头文件。 ### 回答2: 在Qt调用一个cpp文件的变量可以通过以下方法实现: 1.在需要使用变量的cpp文件包含所需变量所在cpp文件的头文件(.h文件)。 2.在需要使用变量的cpp文件定义一个该变量的实例。可以通过使用该变量所属的方法来访问该变量。例如,如果变量属于一个名为“myClass”的,则可以通过以下方式访问该变量: myClass myInstance; int myVar = myInstance.variableName; 3.如果所需变量是全局变量,则可以直接使用该变量名访问该变量。 例如,如果变量名为“globalVar”,则可以通过以下方式访问该变量: int myVar = globalVar; 需要注意的是,为了能够正常使用另一个cpp文件的变量,所需变量必须是公有的,并且所属必须可以被实例化。如果变量是私有的,则需要在所属定义一个公有方法来获取该变量的值。 总之,Qt调用一个cpp文件的变量与其他C++编程语言的方法似,只需要在需要使用变量的cpp文件以正确的方式包含并调用所需变量即可。 ### 回答3: 在Qt调用一个cpp文件的变量,可以使用以下方法: 1. 在另外的cpp文件定义一个全局变量。可以在头文件定义extern int global_var,然后在cpp文件实现int global_var = 0; 2. 通过信号与槽来传递变量。在一个定义一个槽函数,当槽函数被触发时,将另一个的变量作为参数传递给该槽函数。 3. 在另外的cpp文件定义一个静态变量,然后使用该静态变量来传递变量。静态变量在整个程序生命周期内都存在,因此可以随时访问。 4. 如果需要将某些变量公开给其他的和窗口,建议将其定义为公有变量或提供公有的get和set方法,然后在需要的地方调用这些方法来访问和修改变量。 总之,在Qt,我们可以使用各种方法来调用其他cpp文件的变量,具体取决于应用程序的需要和结构设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值