C++和C区别
1.函数重载
C++产生函数符号的时候是由函数名+参数列表组成的
C产生函数符号的时候是由函数名决定的。因此,C语言不支持函数重载。
1. 什么是函数重载
-
一组函数,其中函数名相同,参数列表的个数或者类型不同,那么这一组函数就称为函数重载
-
一组函数要称得上重载,一定要在同一个作用域中。
-
同一作用域:
#include <iostream> #include <cstring> using namespace std; bool compare(int a, int b) { cout << "int int" << endl; return a > b; } bool compare(double a, double b) { cout << "double double" << endl; return a > b; } bool compare(const char* a, const char* b) { cout << "const char* const char*" << endl; return a > b; } int main() { //bool compare(int, int); compare(10, 20); compare(10.2, 40.2); compare("abcd", "efgh"); return 0; }
-
不同作用域
#include <iostream> #include <cstring> using namespace std; bool compare(int a, int b) { cout << "int int" << endl; return a > b; } bool compare(double a, double b) { cout << "double double" << endl; return a > b; } bool compare(const char* a, const char* b) { cout << "const char* const char*" << endl; return a > b; } int main(){ bool compare(int, int); compare(10, 20);//int int compare(10.2, 40.2);//int int compare("abcd", "efgh");//error return 0; }
由于在
main()
函数内部作用域中仅仅声明了bool compare(int, int);
,因此,compare("abcd", "efgh");
会去调用该作用域声明的函数,也就会试图把const char*
转换成int
显示结果:
-
-
const或者volatile的时候
-
const情况下:
void func(int a) { cout << "int" << endl; } void func(const int a) { cout << "const int" << endl; } int main() { int a = 10; func(a); const int b = 99; func(b); return 0; }
显示结果:
编译器认为
void func(int a)
和void func(const int a)
是一样的. -
-
一组函数,函数名相同,参数列表也相同,仅仅返回值不同,不叫重载。
2. C++、C如何相互调用?
1. C++调用C
如果直接调用,由于C++中函数符号表为:函数名+参数列表;而C中函数只是函数名。
因此C++无法找到C函数。
方法:采用extern实现,把C函数的声明括在extern "C"里面
//test01.c(注意是C文件)
int sum(int a, int b) {
return a+b;
}
//main.cpp
#include <iostream>
#include <cstring>
using namespace std;
extern "C" {
int sum(int a, int b);
}
int main() {
int ret = sum(10, 20);
cout << "ret : " << ret << endl;
return 0;
}
2.C调用C++
方法:也是采用extern,但是extern是CPP才有的,C没这个语法
因此我们仍然要在.cpp文件中使用。
把C++源码括在extern “C”里面
//test01.c
#include<stdio.h>
int main() {
int ret = sum(10, 20);
printf("ret : %d\n", ret);
return 0;
}
//main.cpp
#include<iostream>
extern "C" {
int sum(int a, int b) {
return a + b;
}
}