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

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

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

使用VC或VS创建C++项目的时候,会自动产生许多文件夹,其中有一个文件夹->源文件:

在该文件下可以自定义许多.cpp文件,但是需要注意的是这里面的各个文件只能有一个文件中含有main()函数,

而且各个文件中不能使用相同的函数名进行定义;

那么要那么多文件放在项目中有什么用呢?

当然这里C++是提供一个文件调用其他文件中函数的功能的,

这就可以让我们自定义一个只包含main()函数的文件,通过在该函数中调用其他文件中的函数就可以将各个文件链接起来,

而且更重要的一点就是,通过调用其他,cpp文件中的函数的时候,如果调用的某函数又调用了它自己文件中的一个函数,

那么只用调用“父级函数”就可以实现间接调用~~~

看示例

首先是资源管理窗口:

功能主函数.cpp

// C++上机作业.cpp : 定义控制台应用程序的入口点。
//'0-9': 48-57

#include "stdafx.h"
using namespace std;
extern void gotoxy(short x, short y);
extern void sort_by_name();
extern int Strtoint();

int main()
{
	system("title 功能主函数");
	gotoxy(23, 2); cout << "功能列表";
	gotoxy(15, 3); cout << "1:字符串转换为数值类型";
	gotoxy(15, 4); cout << "2:对中文字符进行排序";

	gotoxy(0, 10);
	int choice = 0;
	cout << "请输入您要执行的功能:";
	cin >> choice;
	getchar();    //吸收回车
	switch (choice)
	{
		case 1:
			Strtoint();
			break;
		case 2:
			sort_by_name();
			break;
		default:
			cout << "选择失败,感谢使用,再见!" << endl << endl;
	}
    return 0;
}

stdafx.h(stdandard application framework extensions)

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//

#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <Windows.h>
#include <string>    //注意这里的string与cstring中的使用差别,在定义与使用cout输出string类型字符串的时候,最好使用string库,否则可能会出现乱码以及错误等一系列错误

// TODO:  在此处引用程序需要的其他头文件

gotoxy().cpp

#include "stdafx.h"
using namespace std;

void gotoxy(short x, short y)
{
	COORD pos = { x,y };
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOut, pos);
}

对中文字符的排序.cpp

//对中文字符串进行排序时,默认是按照第一个字符的第一个拼音的顺序进行排序

#include "stdafx.h"
using namespace std;

void sort_by_name()
{
	string s[4] = { "一号","二号","三号","四号" }, t;
	for (int i = 0; i<4; i++)
	{
		for (int j = i; j<4; j++)
		{
			if (s[i]>s[j])
			{
				t = s[i];
				s[i] = s[j];
				s[j] = t;
			}
		}
	}
	for (int i = 0; i < 4; i++)
	{
		cout << s[i] << endl;
	}
	cout << "功能运行结束!" << endl << endl;
}

字符串转换为数值型.cpp

#include "stdafx.h"
using namespace std;

int Strtoint_0(const char str[])  //字符串数字转换为整形
{
	int i = 0, j = 0;
	long long number1 = 0;    //定义一个长整形变量,用来存储转换后得到的值
	int number[50] = { 0 };    //定义一个数组,用来存储转换后得到的值
	int symbol = 1;    //符号常量,0为负,1为正(默认为正)
	while (str[i] != '\0')	  //测试输出判断是否正确
	{
		while (str[i] == ' ')
		{
			i++;
		}
		if ((str[i] == '+' || str[i] == '-'))
		{
			i++;
			if (str[i] == '-')
			{
				symbol = 0;
			}
		}
		else if (str[i]<'9' && str[i]>'0')
		{
			number[j++] = str[i] - 48;    //存储数据,j++
										  //			cout << number[j - 1] << endl;
			i++;
		}
		if (str[i]>'9' || str[i]<'0')    //停止输出规则判断语句
		{
			break;
		}
	}
	cout << "数的位数为:" << j << endl;    //j到这里就已经得到数组的最大索引值+1了
	int x = 1;
	for (int k = j - 1; k >= 0; k--, x = x * 10)
	{
		number1 += number[k] * x;
	}
	if (symbol == 0)
	{
		number1 = number1*(-1);
	}
	cout << "转换后的数为:" << number1 << endl << endl;
	return 1;
}

int Strtoint()    //调用字符转换函数,确保变量不在主函数中定义
{
	char arr[50] = { 0 };
	int i = 0;
	char c;
	cout << "Please input the string :" << endl;
	while ((c = getchar()) != '\n')
	{
		arr[i++] = c;	//注意这里下面的i就开始++了
	}
	/*
	while ((c = cin.get()) != '\n')    //另一种控制输入的方法
	{
	arr[i++] = c;
	cout << arr[i - 1];
	}
	*/
	Strtoint_0(arr);
	return 0;
}

在主文件cpp中调用其他文件函数的方法

直接用

和我们的数据成员必须加extern不同的是,你只需把待调用函数的声明写在其头文件中,然后在主函数中直接用就可以

//test.h
#ifndef TEST_H //注意,这里千万不要写成TEST.H,必须用下划线,用点不行
#define TEST_H
void print();
#endif

//test.cpp
#include<iostream>
#include"test.h"
using namespace std;
void print() {
	cout << "test函数被调用" << endl;
}

//main.cpp
#include<iostream>
#include"test.h"
using namespace std;
int main() {
	print();
}

extern方法

使用extern的时候你甚至不需要在main.cpp文件中加上引用文件的声明,直接就可以用。

#include<iostream>
using namespace std;
extern void print();
int main() {
	print();
}

但是这样写其实作用不大,在一些大的工程中反而不如以好用。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C++的头文件和实现文件详解

    在C++编程过程中,随着项目的越来越大,代码也会越来越多,并且难以管理和分析.于是,在C++中就要分出了头(.h)文件和实现(.cpp)文件,并且也有了Package的概念. 对于以C起步,C#作为"母语"的我刚开始跟着导师学习C++对这方面还是感到很模糊.虽然我可以以C的知识面对C++的语法规范,用C#的思想领悟C++中类的使用.但是C#中定义和实现是都在一个文件中(其实都是在类里面),而使用C的时候也只是编程的刚刚起步,所写的程序也只要一个文件就够了.因此对于C++的Package

  • C++中的构造函数详解

    目录 普通变量的初始化 构造函数 一定会生成默认构造函数吗? 防止隐式类型转换 赋值与初始化的区别 对象的计数 成员初始化的顺序 类的引用成员 构造函数使用注意事项 参考 总结 普通变量的初始化 当我们在定义一个变量不给它指定一个初始值时,这对于全局变量和局部变量来说结果会不一样.全局变量在程序装入内存时 就已经分配好空间,程序运行期间其地址不变,它会被初始化为全0(变量的每一位都为0).但是局部变量定义在函数内部,存储在栈上,当函数被调用时,栈会分配一部分空间来存储该局部变量(也就是只分配空间

  • C++知识点之inline函数、回调函数和普通函数

    目录 一.inline内联函数# 1.1 使用# 1.2 编译器对 inline 函数处理步骤# 1.3 优缺点# 1.3.1 优点# 1.3.2 慎用内联# 1.3.3 不宜使用内联# 1.4 虚函数(virtual)可以是内联函数(inline)吗?# 二.回调函数和普通函数# 2.1 什么是回调函数?# 2.2 为什么要使用回调函数?# 回调函数和普通函数有什么区别? 总结 一.inline内联函数# 特征 相当于把内联函数里面的内容写在调用内联函数处: 相当于不用执行进入函数的步骤,直接

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

    目录 一个函数调用其他.cpp文件中的函数 看示例 在主文件cpp中调用其他文件函数的方法 直接用 extern方法 总结 一个函数调用其他.cpp文件中的函数 使用VC或VS创建C++项目的时候,会自动产生许多文件夹,其中有一个文件夹->源文件: 在该文件下可以自定义许多.cpp文件,但是需要注意的是这里面的各个文件只能有一个文件中含有main()函数, 而且各个文件中不能使用相同的函数名进行定义: 那么要那么多文件放在项目中有什么用呢? 当然这里C++是提供一个文件调用其他文件中函数的功能的

  • pycharm 使用心得(八)如何调用另一文件中的函数

    实现步骤: 1. PyCharm, IDE有个Project setting图标,是给run图标做配置的,配置run file为myfile.py2. 复制代码 代码如下: # --------------------------------------#! /usr/bin/python# File: myfile.py# Author: Michael Fan from make.py import do def main():do() if __name__ == '__main__':m

  • Python实现调用另一个路径下py文件中的函数方法总结

    本文实例讲述了Python实现调用另一个路径下py文件中的函数方法.分享给大家供大家参考,具体如下: 针对这个问题,网上有很多的解决方式.其实最主要的原因是因为Python无法正确找到你其他文件夹下文件的路径.针对不同的环境和问题有不同的方法,大家可自行测试. 1. 方法一 首先,我先把解决我本人问题的方法记录如下.环境,Python为3.5,pycharm工作区间.主文件(main_preprocess.py)需要运用split_by_date.py中的函数,main_preprocess与s

  • Python如何调用JS文件中的函数

    Python 调用JS文件中的函数方法如下 1.安装PyExecJS第三方库 2.导入库:import execjs 3.调用JS文件中的方法 Passwd = execjs.compile(open(r"web.js").read().decode("utf-8")).call('loginHandle','steam') 语句解析,open后跟所执行的js文件位置,call后第一个单引号引起来的为所执行的js文件的某个function, 第二个单引号是前面函数的

  • python如何调用php文件中的函数详解

    前言 python调用php代码实现思路:php文件可通过在terminal中使用php命令行进行调用,因此可使用python开启子进程执行命令行代码.函数所需的参数可通过命令行传递. 测试环境 1.操作系统:macos10.13.2 2.php版本:PHP 7.1.7(mac自带) 3.python版本:python3.6.0 4.python库:subprocess 调用php函数 php命令行调用php文件中的函数 php文件:test_hello.php <?php function h

  • C 与 C++ 接口函数相互调用的实现

    一.C 或 C++ 编译的四个步骤 (一) 预处理 在该步骤中,编译器将源程序中以"#"开头的语句进行处理.其中,#include 的原理是将目标文件内容导入本文件. (二) 编译 在该步骤中,编译器将第一步生成的各个文件分别转换成汇编语言文件.在该过程中,所有函数的名称都会被转换成一个符号作为汇编文件中的唯一标识,对 C 语言函数一般直接用函数名称作为其唯一标识的符号,而对于 C++ 函数在多数情况下需要在函数名称加上各种前缀或后缀才能作为其标识,比如函数 void Print(in

  • nodejs中函数的调用实例详解

    一.调用本js文件中的函数 var http = require('http'); http.createServer(function (request,response){ response.writeHead(200, {'Contet-Type':'text/html;charset=utf-8'}); if(request.url!=='/favicon.ico'){ funl(response); response.end(''); } }).listen(8000); consol

  • 源码解析python中randint函数的效率缺陷

    目录 一.前言 二.对randint()运行效率的测试 三.从源码分析randint()的缺陷 random.random() random.randint() 四.更快的生成随机整数的方法 random.random() 直接使用 getrandbits() 使用 Numpy.random 一.前言 前几天,在写一个与差分隐私相关的简单程序时,我发现了一些奇怪的东西:相对于其他的随机数生成函数,Python的random.randint()函数感觉很慢. 由于 randint() 是 Pyth

  • shell函数内调用另一个函数(不带返回值和带返回值)

    目录 一.函数B调用不带返回值的函数A 二.函数B调用带返回值的函数A,并接收函数A的返回值进行输出 一.函数B调用不带返回值的函数A 新建文件,命名为 test.sh,添加如下代码: #!/bin/bash # 即将被调用的函数A function A(){ a="aaa" echo $a } # 函数B,直接调用A function B(){ A echo "bbb" } B 命令行中通过sh test.sh执行结果: 二.函数B调用带返回值的函数A,并接收函数

  • php获取远程文件内容的函数

    一个简单的php获取远程文件内容的函数代码,兼容性强.直接调用就可以轻松获取远程文件的内容,使用这个函数也可获取图片.代码如下: /** * 读远程内容 * @return string */ function get_url_content($url){ if(function_exists("curl_init")){ $ch = curl_init(); $timeout = 30; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt

随机推荐