目录
程序内存布局
每一个进程在运行时都有一个地址空间:虚拟地址空间
强制转换
c++中强制转换的4种写法
1.static_cast 用在void* 向其他类型进行转换
2.const_cast 用在函数传递参数的过程中去除常量属性
3.dynamic_cast 用在父子类(基类派生类)之间
4.reinterpret_cast 在任意类型之间进行转换,很危险,不使用
函数重载
定义:名字改编
函数重载的具体步骤:当函数名相同时,根据参数的类型,顺序,个数进行名字改变
#include <iostream>
2 using std::cout;
3 using std::endl;
4
5 int test0(int x,int y){
6 return x+y;
7 }
8 int test0(int x,int y,int z){
9 return x+y+z;
10 }
11
12
13
14 int main()
15 {
16 int x=1;
17 int y=2;
18 int z=3;
19 //c++支持函数重载的原理:名字改编
20 //当函数名相同时,根据参数的类型,个数,顺序进行改编
21 cout<<"使用test0(int x,int y)"<<test0(x,y)<<endl;
22 cout<<"使用test0(int x,int y,int z)"<<test0(x,y,z)<<endl;
23 return 0;
24 }
运行结果
c与c++函数调用方式不同
使用extern关键字可以在c++中按c语言的方式执行代码
1 #include <iostream>
2 using std::cout;
3 using std::endl;
4
5
6 //函数在c语言与c++中调用的区别
7
8 /* #ifdef _cplus_plus */
9 extern "C"
10 {
11 /* #endif */
12
13 int add(int x,int y){
14 return x+y;
15 }
16 /* #ifdef _cplus_plus */
17 }
18 /* #endif */
19 int add(int x,int y,int z){
20 return x+y+z;
21 }
22
23 int main()
24 {
? 25 int x=1;
? 26 int y=2;
? 27 int z=3;
28 //c++支持函数重载的原理:名字改编
29 //当函数名相同时,根据参数的类型,个数,顺序进行改编
30 return 0;
31 }
执行结果发现c语言执行函数没有进行名字改写,而c++进行了名字改写
c与c++的混合编程
如果要在c++中引入c语言的库函数,那么怎么保证可以正常运行?(c++怎么兼容c语言?)
使用extern配合#ifdef __cpluscplus实现
1 #include <iostream>
2 using std::cout;
3 using std::endl;
4
5 #ifdef _cplus_cplus
6 extern "C"{
7 #endif
8 int add(int x,int y){
9 printf("按c语言执行的add函数");
overload2.cc buffers
1 #include <iostream>
2 using std::cout;
3 using std::endl;
4
5 #ifdef __cplusplus
6 extern "C"{
7 #endif
8 int add(int x,int y){
9 printf("按c语言执行的add函数");
10 return x+y;
11 }
12 #ifdef __cplusplus
13 }
14 #endif
15
16 int add(int x,int y,int z){
17 cout<<"按c++执行的add函数"<<endl;
18 return x+y+z;
19 }
20
21
22 int main()
23 {
24 cout<<add(1,2)<<endl;
25 cout<<add(1,2,3)<<endl;
26 return 0;
27 }
运行结果
默认参数
默认参数必须要按照从右往左的顺序进行,否则会发生编译错误
1 #include <iostream>
2 using std::cout;
3 using std::endl;
4
5 int add(int x,int y,int z=0){
6 cout<<"x+y+z="<<x+y+z<<endl;
7 return x+y+z;
8 }
9
10
11 int main()
12 {
13 add(10,5);
14 return 0;
15 }
运行结果
当默认参数在函数声名时已经设置过,那么在函数定义时不需要重复给出,否则报错
inline函数
与带参数的宏定义(宏函数)类似,但是和宏函数还是不同,例如inline函数有类型检查但是宏函数没有,详情参考:
inline函数是在一个函数的返回类型之前加上inline关键字,则该函数就会变成一个inline函数,inline函数会在编译期讲函数体的内容替换掉,而不是直接调用函数,功能与带参数的宏定义相同,程序执行效率更高(函数调用是有开销的)
1 #include <iostream>
2 //inline函数的例子
3 inline
4 int max(int x,int y){
5 return (x>y?x:y);
6 }
7
8 int main()
9 {
10 return 0;
11 }