伙伴云客服论坛»论坛 S区 S软件开发 查看内容

0 评论

0 收藏

分享

C++一个函数如何调用其他.cpp文件中的函数

目录

    一个函数调用其他.cpp文件中的函数
      看示例
    在主文件cpp中调用其他文件函数的方法
      直接用extern方法
    总结


一个函数调用其他.cpp文件中的函数

使用VC或VS创建C++项目的时候,会自动产生许多文件夹,其中有一个文件夹->源文件:
在该文件下可以自定义许多.cpp文件,但是需要注意的是这里面的各个文件只能有一个文件中含有main()函数,
而且各个文件中不能使用相同的函数名停止定义;
那么要那么多文件放在项目中有什么用呢?
当然这里C++是提供一个文件调用其他文件中函数的功能的,
这就可以让我们自定义一个只包含main()函数的文件,通过在该函数中调用其他文件中的函数就可以将各个文件链接起来,
而且更重要的一点就是,通过调用其他,cpp文件中的函数的时候,假设调用的某函数又调用了它自己文件中的一个函数,
那么只用调用“父级函数”就可以实现间接调用~~~

看示例

首先是资源管理窗口:
C++一个函数如何调用其他.cpp文件中的函数-1.png

功能主函数.cpp
  1. // C++上机作业.cpp : 定义控制台应用程序的入口点。
  2. //'0-9': 48-57
  3. #include "stdafx.h"
  4. using namespace std;
  5. extern void gotoxy(short x, short y);
  6. extern void sort_by_name();
  7. extern int Strtoint();
  8. int main()
  9. {
  10.         system("title 功能主函数");
  11.         gotoxy(23, 2); cout << "功能列表";
  12.         gotoxy(15, 3); cout << "1:字符串转换为数值类型";
  13.         gotoxy(15, 4); cout << "2:对中文字符停止排序";
  14.         gotoxy(0, 10);
  15.         int choice = 0;
  16.         cout << "请输入您要执行的功能:";
  17.         cin >> choice;
  18.         getchar();    //吸收回车
  19.         switch (choice)
  20.         {
  21.                 case 1:
  22.                         Strtoint();
  23.                         break;
  24.                 case 2:
  25.                         sort_by_name();
  26.                         break;
  27.                 default:
  28.                         cout << "选择失败,感激使用,再见!" << endl << endl;
  29.         }       
  30.     return 0;
  31. }
复制代码
stdafx.h(stdandard application framework extensions)
  1. // stdafx.h : 规范系统包含文件的包含文件,
  2. // 或是经常使用但不常更改的
  3. // 特定于项目的包含文件
  4. //
  5. #pragma once
  6. #include "targetver.h"
  7. #include <stdio.h>
  8. #include <tchar.h>
  9. #include <iostream>
  10. #include <Windows.h>
  11. #include <string>    //注意这里的string与cstring中的使用差别,在定义与使用cout输出string类型字符串的时候,最好使用string库,否则可能会呈现乱码以及错误等一系列错误
  12. // TODO:  在此处引用程序需要的其他头文件
复制代码
gotoxy().cpp
  1. #include "stdafx.h"
  2. using namespace std;
  3. void gotoxy(short x, short y)
  4. {
  5.         COORD pos = { x,y };
  6.         HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
  7.         SetConsoleCursorPosition(hOut, pos);
  8. }
复制代码
对中文字符的排序.cpp
  1. //对中文字符串停止排序时,默认是依照第一个字符的第一个拼音的顺序停止排序
  2. #include "stdafx.h"
  3. using namespace std;
  4. void sort_by_name()
  5. {
  6.         string s[4] = { "一号","二号","三号","四号" }, t;
  7.         for (int i = 0; i<4; i++)
  8.         {
  9.                 for (int j = i; j<4; j++)
  10.                 {
  11.                         if (s[i]>s[j])
  12.                         {
  13.                                 t = s[i];
  14.                                 s[i] = s[j];
  15.                                 s[j] = t;
  16.                         }
  17.                 }
  18.         }
  19.         for (int i = 0; i < 4; i++)
  20.         {
  21.                 cout << s[i] << endl;
  22.         }
  23.         cout << "功能运行完毕!" << endl << endl;
  24. }
复制代码
字符串转换为数值型.cpp
  1. #include "stdafx.h"
  2. using namespace std;
  3. int Strtoint_0(const char str[])  //字符串数字转换为整形
  4. {
  5.         int i = 0, j = 0;
  6.         long long number1 = 0;    //定义一个长整形变量,用来存储转换后得到的值
  7.         int number[50] = { 0 };    //定义一个数组,用来存储转换后得到的值
  8.         int symbol = 1;    //符号常量,0为负,1为正(默认为正)
  9.         while (str[i] != '\0')          //测试输出判断是否正确
  10.         {
  11.                 while (str[i] == ' ')
  12.                 {
  13.                         i++;
  14.                 }
  15.                 if ((str[i] == '+' || str[i] == '-'))
  16.                 {
  17.                         i++;
  18.                         if (str[i] == '-')
  19.                         {
  20.                                 symbol = 0;
  21.                         }
  22.                 }
  23.                 else if (str[i]<'9' && str[i]>'0')
  24.                 {
  25.                         number[j++] = str[i] - 48;    //存储数据,j++
  26.                                                                                   //                        cout << number[j - 1] << endl;
  27.                         i++;
  28.                 }
  29.                 if (str[i]>'9' || str[i]<'0')    //停止输出规则判断语句
  30.                 {
  31.                         break;
  32.                 }
  33.         }
  34.         cout << "数的位数为:" << j << endl;    //j到这里就已经得到数组的最大索引值+1了
  35.         int x = 1;
  36.         for (int k = j - 1; k >= 0; k--, x = x * 10)
  37.         {
  38.                 number1 += number[k] * x;
  39.         }
  40.         if (symbol == 0)
  41.         {
  42.                 number1 = number1*(-1);
  43.         }
  44.         cout << "转换后的数为:" << number1 << endl << endl;
  45.         return 1;
  46. }
  47. int Strtoint()    //调用字符转换函数,确保变量不在主函数中定义
  48. {
  49.         char arr[50] = { 0 };
  50.         int i = 0;
  51.         char c;
  52.         cout << "Please input the string :" << endl;
  53.         while ((c = getchar()) != '\n')
  54.         {
  55.                 arr[i++] = c;        //注意这里下面的i就开端++了
  56.         }
  57.         /*
  58.         while ((c = cin.get()) != '\n')    //另一种控制输入的方法
  59.         {
  60.         arr[i++] = c;
  61.         cout << arr[i - 1];
  62.         }
  63.         */
  64.         Strtoint_0(arr);
  65.         return 0;
  66. }
复制代码
在主文件cpp中调用其他文件函数的方法


直接用

和我们的数据成员必需加extern不同的是,你只需把待调用函数的声明写在其头文件中,然后在主函数中直接用就可以
  1. //test.h
  2. #ifndef TEST_H //注意,这里千万不要写成TEST.H,必需用下划线,用点不行
  3. #define TEST_H
  4. void print();
  5. #endif
  6. //test.cpp
  7. #include<iostream>
  8. #include"test.h"
  9. using namespace std;
  10. void print() {
  11.         cout << "test函数被调用" << endl;
  12. }
  13. //main.cpp
  14. #include<iostream>
  15. #include"test.h"
  16. using namespace std;
  17. int main() {
  18.         print();
  19. }
复制代码
C++一个函数如何调用其他.cpp文件中的函数-2.png


extern方法

使用extern的时候你甚至不需要在main.cpp文件中加上引用文件的声明,直接就可以用。
  1. #include<iostream>
  2. using namespace std;
  3. extern void print();
  4. int main() {
  5.         print();
  6. }
复制代码
但是这样写其实作用不大,在一些大的工程中反而不如以好用。

总结

以上为个人经历,希望能给大家一个参考,也希望大家多多支持网站。

回复

举报 使用道具

全部回复
暂无回帖,快来参与回复吧
本版积分规则 高级模式
B Color Image Link Quote Code Smilies

马云的同事
注册会员
主题 25
回复 19
粉丝 0
|网站地图
快速回复 返回顶部 返回列表