C++ 比 C语言增加的新特性 2

1.C++新增了带默认值参数的函数

1.1 格式

cpp 复制代码
格式:
	返回值   函数名(参数1=初始值1,..........)
	{

	} 
例如:
	void  function(int  a=10)
	{
		
	}
调用:
	不需要更改参数的值:
		function();
这个调用并没有传参,如果要输出a的值,则输出默认值a=10

	更改参数的值:
		function(20);
这里改变了参数的值,如果要输出a的值,则输出a=20(即默认值被覆盖)

1.2 注意

此调用报错,因为调用function(20),这里的20 默认传递给第一个形参

cpp 复制代码
void  function(int a=10,  int  c)
	{

	}
	调用:
		function(20);//报错


//报错信息
		test2.cpp:25:28: error: default argument missing for parameter 2 of 'void function(int, int)'
 	  25 | void function(int a=10,int c)
    	  |                        ~~~~^
		test2.cpp:25:19: note: ...following parameter 1 which has a default argument
  		 25 | void function(int a=10,int c)

规定:函数中携带默认值的参数需要放在不携带默认值的参数后(针对于多个参数讲)

cpp 复制代码
void function(int  a ,  int  c=10)
	{

	}

	调用:
		function(20);

1.3 举例

main.cpp

1.3.1 例1

cpp 复制代码
#include <iostream>
using namespace std;

//函数的形参可以带默认值
void function(int c = 10) {
	cout << "c=" << c << endl;
}

int main()
{
	function();//a=10

	//function(20);//a=20
	return 0;
}

1.3.2 例2

cpp 复制代码
#include <iostream>
using namespace std;

//函数的形参可以带默认值
//void function(int c = 10) {
//	cout << "c=" << c << endl;
//}

//void function1(int c = 10,int b) {
//	cout << "c=" << c << endl;
//}

void function2(int b,int c = 10) {
	cout << "b=" << b << endl;
	cout << "c=" << c << endl;
}

int main()
{
	//function();//a=10

	//function(20);//a=20

	//function1(20);//报错

	function2(20);//报错

	return 0;
}

2. 内联函数

2.1 概念:

内联函数是指:程序在编译过程中直接进行展开,就不需要在执行时对于函数的参数、局部变量、函数地址等入栈/出栈操作

用途:适用于短小且使用率非常高的代码,内联函数中一般不会放置循环结构

cpp 复制代码
内联函数的声明:
		关键字:inline
		格式:
			inline   返回值    函数名  ([参数1,..........])
			{
				
			}
		调用:
			函数名([实参1,....])
		例如:
			inline  void function()
			{

			}
			调用:function()

1.2 举例

main.cpp

cpp 复制代码
//内联函数的使用
inline int max(int a,int b) {
	return a > b?a: b;
}

int main()
{
	int a = 10;
	int b = 20;
	int ret = max(a,b);
	cout << "ret=" << ret << endl;
	return 0;
}

1.3 面试题

对于一段精简、使用频度高的代码,C语言如何实现才能提高效率,C++如何实现才能提高效率?

C++中将这段代码声明为内联函数

C语言使用宏来实现

例如以下两个举例

#define get_Max(a,b) a>b?a:b

#define sum(a,b) (a)*b

int sum_result=sum(10+20 , 30) ;//900

3. 另外c++还增加了以下等等

(5)新增异常处理

C++可以主动产生异常,并捕获异常进行处理

(6)新增面向对象机制

封装、继承、多态等等

(7)智能指针

用于帮助用户管理堆内存空间

4. C++的编译流程和文件架构

4.1 C++的编译流程

与C一样,在Linux中编译C++代码,一般采用g++

请你阐述C/C++的编译流程,以及每个流程中执行的工作任务

(1)预处理

a、将除源文件以外的内容全部加入到源文件中

b、进行宏替换工作

c、删除掉注释

(2)编译

a、检查用户编写的代码是否符合C++语法规范

b、将用户编写的代码翻译成汇编语言

(3)汇编

a、将汇编语言翻译成机器语言

(4)链接

a、生成可执行文件

4.2 C++的文件架构以及扩展名

(1)主程序文件

该文件中包含main函数,一般放置类的声明与实例化,函数的声明与定义等等

(2)源文件(一般是以.cpp为主)

源文件的后缀名一般是.cpp、.cxx、.cc等等,一般放置类的成员函数实例化、函数的定义等等

(3)头文件(一般是以.h为主)

头文件的后缀名一般是.h、.hpp、.hxx等等,一般放置类的声明、变量的声明、函数的声明等等

相关推荐
wowocpp1 小时前
查看 linux ubuntu 分区 和 挂载 情况 lsblk
linux·运维·ubuntu
wowocpp1 小时前
查看 磁盘文件系统格式 linux ubuntu blkid ext4
linux·数据库·ubuntu
龙鸣丿2 小时前
Linux基础学习笔记
linux·笔记·学习
耶啵奶膘3 小时前
uniapp-是否删除
linux·前端·uni-app
奋斗的小花生4 小时前
c++ 多态性
开发语言·c++
闲晨4 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
2401_850410834 小时前
文件系统和日志管理
linux·运维·服务器
XMYX-05 小时前
使用 SSH 蜜罐提升安全性和记录攻击活动
linux·ssh
UestcXiye5 小时前
《TCP/IP网络编程》学习笔记 | Chapter 3:地址族与数据序列
c++·计算机网络·ip·tcp
霁月风7 小时前
设计模式——适配器模式
c++·适配器模式