C++从头开始(基础与提高day1)

今天通过腾讯课堂学习了由王桂林老师主讲的C++,从中也是受益匪浅,坚持从头开始,一点一滴学好C++。

一、C++的背景,也没啥好记的了,这样的介绍还是很多的。

二、C++的地位,C++(包括C)从诞生到现在的几十年里一直保持在前三的位置,因此,在很长的一段时间内,C++仍然会坚挺着

三、应用领域,C++的应用领域十分的广泛,可以这样说,在很多IT领域中都可以看到它的身影。

四、C++对C的扩展

1.类型的增强,在C++中不能再玩“明修栈道,暗度陈仓”的把戏了,例如在C语言中虽然const int的值是不能被改变的,但是却可以通过指针操作,改变其中的值,不过这样的操作在C++中是不可以进行的。

2.C++中增加了bool类型,虽然看上去是然并卵(在C中是用0和1表示),这样的操作,完全可以使用枚举(enum)实现

3.真正的枚举(enum),这样说的原因是,虽然C中也有枚举,但是在使用的时候,即使赋值不再枚举的范围内,但是依然是可以执行的,但是在C++中,枚举的值必须在枚举的范围内

4.在C语言中,表达式是不能被赋值的,但是在C++中某些表达式是可以被赋值的(这个跟运算符的重载有关),例如int a, b=5;(a=b)=100;在C中就是报错的,但是在C++中就能编译通过。

五、输入与输出(cin和cout)

1.cin、cout(类对象)与scanf、sprintf(函数)具有相同的功能

2.如果定义一个数组,在用这两种输入方式进行输入的时候,都是不安全的,不能保证输入的长度,例如 char name[30]; 用cin>>name;或者使用scanf("%s",name);的时候,如果输入的字符长度超过30个,那么程序就会出错,不过可以使用fgets(name, 30, stdin);这样就指定最多只能接收29个字符(第30个为‘\0‘),从而保证了安全性。

3.虽然通过接收指定长度的操作可以保证程序的安全性,但是这样可能并不能满足用户的需求,所以C++就创造了string,如果将char name[30];改成string name;那么,这个时候就可以不用考虑因为输入过长而导致程序崩溃的问题了(其实是有一个长度的,不过那个长度已经很大很大了,可以通过name.max_size(),这个函数查看),不过这个时候只能使用cin>>name进行输入,而不能使用scanf这个函数了。

4.格式输出的问题,在C语言中,用pringf进行格式输出,可以通过简单的方法,达到丰富的显示效果,在C++中想要达到相同的效果(如果是使用cout)那还是比较麻烦的。以下是对比:

对比 C语言 C++
设置位宽(n) printf("%nd\n", test); cout<<setw(n)<<test<<endl;
左对齐 printf("%-d\n", test); cout<<setiosflags(ios::left)<<test<<endl;
设置小数点右边位数(n) printf("%.nd\n",test); cout<<setprecision(n)<<setiosflags(ios::fixed)<<test<<endl;
     
     

六、函数重载

1.重载:通俗的说就是同一个东西,表示不同的意思,这个不同的意思是由当时的语境来决定的(一词多义)

2.重载的规则:函数名相同,函数的参数列表不同(类型、个数、顺序)

3.匹配原则:a.严格匹配,找到则调用 b.如果严格匹配找不到,通过隐式转换寻求一个匹配,找到则调用

其中int在向long 和 double进行隐式转换,double 向int 和 float进行隐式转换的时候会出现二义性(ambiguous)

4.返回值的类型不能作为函数重载的条件

5.函数重载实现的原理:重载的底层进行了轻轧(name mangling)的操作

轻轧操作在定义和调用的时候被使用(要么都轻轧,要么都不要轻轧,所以C的库中都使用了extern "C")

6.操作符的重载(基本实现),例如重载"+"加法,使用operator+(其余的操作跟函数一样)

七、默认参数(default parameters)

1.单个参数,在函数中直接使用默认值就好

2.多个参数,默认从右往左,中间不能跳跃

3.实参的个数+默认的参数>=形参的个数

4.在设计时,如有重载和默认参数发生冲突时应注意避免这样的情况,两者不能并存。

例如:void test_fun(int a, int b=2){printf("fun1");}

void test_fun(int a){printf("fun2");}

在这样的情况下,如果调用 test_fun(2);的时候就会出现”二义性"的错误。

注:在只用C++的时候,尽量不要使用指针,字符数组,强制类型转换

时间: 2024-11-08 13:28:35

C++从头开始(基础与提高day1)的相关文章

老段带你学鸟哥Linux视频教程 包含基础班+提高班

老段带你学鸟哥Linux视频教程 包含基础班+提高班,附带pdf文档. 目录结构如下: 目录:/2020022-老段带你学鸟哥Linux视频教程 [1.9G] ┣━━老段带你学鸟哥-服务器篇 [1009.4M] ┃ ┣━━0-456-1.flv [64.8M] ┃ ┣━━0-456-2.flv [34.5M] ┃ ┣━━7.flv [26.6M] ┃ ┣━━8.flv [43.9M] ┃ ┣━━9-1.flv [28.4M] ┃ ┣━━9-2.flv [43.4M] ┃ ┣━━11-1.flv

IOS基础知识提高

第三章类/属性/方法/选择器 1.区分类和对象,类是具有相同属性和行为的一组对象的集合,而对象是具体存在的实体,就有明确定义的状态和行为 2.OO最基本的思想:抽象法 抽象法可以帮助我们发现事物的因果,结构和表现形式,区分主要和次要 3.Objective-c文件扩展名 .h类的头文件,声明class,type,function,constant: .m类的实现源文件,可以包含Objective-c和c代码: .mm可以包含Objective-c和c语言C++代码 [email protecte

组合逻辑是复杂逻辑的基础,提高对组合逻辑的重视!!!!!!!!

1.每个部件模块的设计包括3个部分: 1)电路模块的设计 2)测试模块的设计 3)设计文档的编写和整理. 其中,2.3步是尤为重要.测试模块是否严谨和完整均定了系统设计的成败,设计文档的完整和准确为今后调试和维护带来很大的方便. ***************************************************************************************************** 2.组合逻辑部件(如多路器.比较器.加法器.乘法器.双向三态门和总

跟着大王学Python-基础学习(Day1)

这么多年来一直有打算整理一个自己的博客,从WordPress.51Cto.blog163等等这些没有一个我坚持写下去的,反思其结果总有这样或者那样的一些借口来进行自我辩护,其实自己内心深处是知道最原始的问题.今天是我学习Python的第一天,正如老师所说的写好一个blog可以让很多人知道你,关注你.为了实现这一目标,我又开始了我的blog生涯~,我希望这是我最后申请的一个博客,我要用它来记录我的成长之路,同时也给自己一个警示.目标是需要脚踏实地一步一步去走过,而不是想想就能实现的.~开源的心很重

R语言并行化基础与提高

本文将介绍R中的并行计算,并给出了一些常见的陷进以及避免它们的小技巧. 使用并行计算的原因就是因为程序运行时间太长.大部分程序都是可以并行化的,它们大部分都是Embarrassingly parallel.这里介绍几种可以并行化的方法: Bootstrapping 交叉验证(Cross-validation) (Multivariate Imputation by Chained Equations ,MICE)相关介绍:R语言中的缺失值处理 拟合多元回归方程 学习lapply是关键 没有早点学

3.1.8 、Google Tag Manager基础知识——提高效率的方法:命名规则

GTM用的越久,上面的变量.触发器和代码的数量就越来越多,有时候会多到让您吃惊的地步,看了我管理的一个站点的容器变量.触发器和代码量,居然接近1000个了,仔细翻看,有不少都是两三年前的,已经是废弃的了.下面介绍一种在实践中摸索出来的命名规则,如图3-35所示: 图3-35命名规则 变量:开头字母大写.触发器:直接按照顺序,Tag1命名,因为每一个代码一定会需要一个触发器的,这样能跟代码匹配,容易定位.代码:“Tag1-事件名称”的方式,Tag1是为了跟触发器匹配,事件名称表明这个代码的作用,跟

计算机及Linux基础简介

一.计算机的组成及其功能 计算机由运算器,控制器,存储器,输入装置和输出装置五大部件组成计算机,每一部件分别按要求执行特定的基本功能. 运算器或称算术逻辑单元(Arithmetical and Logical Unit) 运算器的主要功能是对数据进行各种运算.这些运算除了常规的加.减.乘.除等基本的算术运算之外,还包括能进行"逻辑判断"的逻辑处理能力,即"与"."或"."非"这样的基本逻辑运算以及数据的比较.移位等操作. 存储

java提高篇(四)-----抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的.如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类.比如new Animal

作业一:linux基础

1.描述计算机的组成及其功能. 计算机是指一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能. 组成及其功能 计算机由硬件系统.操作系统和应用软件所组成,没有安装任何软件的计算机称为裸机. 一.硬件系统由运算器.控制器.存储器.输入设备和输出设备五大部分组成,遵循冯.诺依曼原理. CPU(中央处理器):由运算器和控制器组成. 功能:实现算术运算和逻辑运算(运算器),指挥系统或称系统协调(控制器).控制器通过地址访问存储器,从存储器中取出指令,经译码器分析后,