C++ 编译过程、强制类型转换、引用、内联函数、函数重载、默认参数值、作用域 5.25

从c到c++

	1 从C到C++
	  1.1 C++基于C的增强,所有对C后向兼容(c里的功能都能用)
	  1.2 语法层面的增强(引用,函数重载,内联函数等新的概念)
	  1.3 编程思想方面的增强
	      面向对象的编程思想
	        封装,将数据和函数封装到一个新的数据类型(类)
	        继承,派生可以继承基类的一切数据(代码复用)
	        多态,一个同名函数在基类和派生类中有不同的实现(一个接口,不同的实现,实现代码功能的扩展)
		  泛型编程思想(模板)
		    函数模板
			类模板

c++编译过程

2 C++的编译过程
  2.1 C++源文件的后缀.cpp
  2.1 编译过程和C程序完全相同:预处理,编译,汇编,连接
  2.2 使用g++编译
  2.3 g++ -E a.cpp //触发预处理
      g++ -S a.cpp //触发预处理,编译
	  g++ -c a.cpp //触发预处理,编译,汇编
	  g++ a.cpp    //触发预处理,编译,汇编,连接

强制类型转换

3 强制类型转换
  C:
  a = (int)b;

  C++:
  static_cast<int>(aa)
  dynamic_cast<Student *>(stu)
  const_cast<Student *>(stu)
  reinterpret_cast<Student *>(stu)

引用

4 引用
  引用:给一个已有的变量取别名
  int a = 100;
  int& ref_a = a;
  3.1 引用一定要初始化
  3.2 引用初始化后不能再指向其他的变量
  3.3 不能返回函数中局部变量的引用,因为当函数执行完,这个局部变量的栈内存会被系统回收,导致段错误,系统崩溃

内联函数

5 内联函数
  inline int add(int, int)
  5.1 提高程序的执行速率,不使用普通的函数调用的流程,再编译的时候直接用代码替换
  5.2 inline函数的代码行数一般< 5; 不能有复杂的switch/while控制语句;不能有递归;不能调用其他的普通函数
  5.3 inline函数在某种程度上是为了替换宏

函数重载

6 函数重载(overload)
  int add(int a, int b);
  int add(int a, int b, int c);
  int add(int *p, int len);
  
  6.1 函数重载,函数名字相同,参数类型不同,参数的个数不同,参数的个数不同(作用域一定相同)
  6.2 仅仅靠返回值不同进行重载是不允许的

默认参数值

7 默认参数值
  定义函数时可以给形参指定一个默认的值
  7.1 语法格式:
    void func1(int a, double b, char c='#');
	...
	func1(1, 3.14)  //相当与调用func1(1, 3.14, '#')
  7.2 默认参数的使用原则:
    默认参数一定放在非默认参数的后面(可以所有的参数都是默认参数)
	一旦出现了第一个默认参数,那他后面的参数一定都是默认参数

作用域

8 作用域
  8.1 局部域
  8.2 名字空间域
  8.3 类域

  8.4 变量的作用域
    局部变量的作用域是局部,
	普通全局变量的作用域是整个项目(别的文件可以访问);
	静态全局变量的作用域是本文件,在别的文件是不可见的
	
  8.5 全局函数的作用域
    普通全局函数的作用域是整个项目(别的文件可以访问);
	静态全局函数的作用域是本文件,在别的文件是不可见的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤独memories

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值