王道短期班c++ day04

本文详细探讨了程序内存布局,C++中的四种强制转换方法,函数重载的概念与实现,以及C++与C的函数调用差异。还介绍了默认参数、inline函数和c与c++混合编程中的兼容性问题。
摘要由CSDN通过智能技术生成

目录

程序内存布局

强制转换

函数重载

c与c++函数调用方式不同

c与c++的混合编程

默认参数

inline函数

程序内存布局

每一个进程在运行时都有一个地址空间:虚拟地址空间

强制转换

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函数,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 }

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
王道数据结构C是一种基于C语言的数据结构实现的教材或参考书籍。该教材根据数据结构的原理与应用,详细介绍了常见的数据结构和算法,并给出了它们的C语言实现。 在实现王道数据结构C时,我们可以通过以下几个步骤来进行: 1. 理解数据结构的原理和特性:首先,我们需要深入理解所学习的数据结构的基本原理和特性,包括线性表、链表、栈、队列、树、图等。熟悉它们的操作规则以及适用的场景。 2. 设计算法和数据结构:其次,针对每个数据结构,我们需要设计相应的算法和数据结构,以满足各种操作和需求。对于线性表,我们可以选择使用顺序表或链表来实现,对于树结构,可以选择二叉树或多叉树等等。 3. 编写C语言代码实现:一旦我们设计好了算法和数据结构,我们可以使用C语言来实现它们。根据数据结构的不同,可能会使用到C语言的指针、结构体、递归等特性来完成实现。 4. 测试和验证:完成代码实现后,我们需要编写一些测试用例来验证代码的正确性和性能。通过不同的测试用例,我们可以检查代码是否满足预期的需求,并且确认代码的运行效率。 5. 优化和修改:在测试过程中,我们可能会发现一些代码的问题或者可以进一步优化的地方。在保证代码正确性的前提下,我们可以对代码进行优化,提高其运行效率和性能。 通过上述步骤,我们可以实现王道数据结构C。通过编写和理解代码,我们可以更深入地学习和理解数据结构的原理和应用,提高自己的编程能力和解决问题的能力。同时,也可以帮助我们更好地理解和掌握C语言的使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值