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

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

1.1 格式

格式:返回值   函数名(参数1=初始值1,..........){} 
例如:void  function(int  a=10){}
调用:不需要更改参数的值:function();
这个调用并没有传参,如果要输出a的值,则输出默认值a=10更改参数的值:function(20);
这里改变了参数的值,如果要输出a的值,则输出a=20(即默认值被覆盖)

1.2 注意

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

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 argument25 | void function(int a=10,int c)

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

void function(int  a ,  int  c=10){}调用:function(20);

1.3 举例

main.cpp

1.3.1 例1

#include <iostream>
using namespace std;//函数的形参可以带默认值
void function(int c = 10) {cout << "c=" << c << endl;
}int main()
{function();//a=10//function(20);//a=20return 0;
}

1.3.2 例2

#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 概念:

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

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

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

1.2 举例

main.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等等,一般放置类的声明、变量的声明、函数的声明等等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/298269.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI日报:2024年人工智能对各行业初创企业的影响

欢迎订阅专栏 《AI日报》 获取人工智能邻域最新资讯 文章目录 2024年人工智能对初创企业的影响具体行业医疗金融服务运输与物流等 新趋势 2024年人工智能对初创企业的影响 2023年见证了人工智能在各个行业的快速采用和创新。随着我们步入2024年&#xff0c;人工智能初创公司正…

双向可控硅触发电路图大全

双向可控硅触发电路图一&#xff1a; 为了提高效率&#xff0c;使触发脉冲与交流电压同步&#xff0c;要求每隔半个交流电的周期输出一个触发脉冲&#xff0c;且触发脉冲电压应大于4V&#xff0c;脉冲宽度应大于20us.图中BT为变压器&#xff0c;TPL521-2为光电耦合器&#xff…

2023RT-Thread开发者大会

参加了一次RT-Thread的开发者大会&#xff0c;相当有意思&#xff0c;虽然一天奔波挺累&#xff0c;但睡了半天之后简单剪了下22号的视频&#xff0c;也就有时间写自己的参会笔记了。 与openEuler社区不同&#xff0c;RT-Thread社区更专注于嵌入式&#xff0c;与硬件厂商结合较…

WorkPlus一站式协同解决方案,助力企业降本增效

在企业数字化转型的过程中&#xff0c;很多企业都会遇到一个共同问题&#xff1a;重复建设基础功能&#xff0c;耗费大量时间和资源。为解决这一难题&#xff0c;WorkPlus已经将一些通用、基础且有技术门槛的功能进行了集成与开发&#xff0c;如IM&#xff08;即时通讯&#xf…

渗透测试——1.1初认识kali

一、kali的下载 官方地址&#xff1a;www.kali.org 下载后压缩就可用vmware打开即可&#xff08;初始账号和密码都是kali&#xff09; 二、三种网络配置 1、桥接模式&#xff1a;将虚拟机看成局域网中的独立主机 2、NAT模式&#xff1a;将物理机当做路由器&#xff08;rout…

操作无法完成(错误 0x000006ba),Windows 11 PDF打印机无法使用解决办法

操作无法完成(错误 0x000006ba)&#xff0c;Windows 11 PDF打印机无法使用解决办法 解决方式一 先重启一次电脑&#xff0c;看看是否可以解决问题。 解决方式二 重新启动 Printer Spooler 服务

doris基本操作,02-创建复合分区表

创建复合分区表 create table table2 (event_day DATE,siteid int defautl 10,citycode smallint,username varchar(32) defautl ,pv bigint sum default 0 )aggregate key (event_day, siteid, citycode, username) -- 按照event_day做range分区 -- paritition by range(even…

继承易错总结

1.继承会将所有的成员继承下来&#xff0c;但是继承方式限定的是继承下来成员的可见类型(如果是private继承&#xff0c;那么他不论哪里都是不可见的&#xff1b;如果是protected继承在类中是可见的&#xff0c;在类外是不可见的&#xff1b;如果是public继承&#xff0c;在任何…

C++ Qt开发:Charts折线图绑定事件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍QCharts折线图的常用方法及灵活运用。 在上一…

ZLMediaKit中的RingBuffer

前面的文章讲到ZLMediaKit转流&#xff0c;提到过RingBuffer&#xff0c;它是比较核心的数据结构。这篇文章就来讲讲RingBuffer的用法。 RingBuffer的类体系 RingBuffer是由多个类组成&#xff0c;分为两大功能&#xff1a;存储和数据分发。 存储功能由类RingStorage实现&…

【笔试强化】Day 8

文章目录 一、单选1.2.3.4.5.6.7.8.9.10. 二、编程1. 求最小公倍数解法&#xff1a;代码&#xff1a; 2. 两种排序方法解法&#xff1a;代码&#xff1a; 一、单选 1. 正确答案&#xff1a;B2. 正确答案&#xff1a;A继承具有传递性 3. 正确答案&#xff1a;C数组不是原生类&…

LaTex中参考文献引用

一、引用参考文献 这里我们使用的是BibTeX的引用格式&#xff0c;因此文件中应包括两个文件&#xff08;.bib-参考文献 和 .bst-文献格式&#xff09;。 有了这两个文件后&#xff0c;我们在bib文件中创建参考文献&#xff1a;&#xff08;注意&#xff0c;作者的名字是逗号前…