C++基础课程回顾-Day01

C++学习笔记回顾-Day01

前言

这个学习笔记主要是黑马程序员中,我也是为了回顾总结,借鉴一下而已。学习笔记呢,其实在代码部分也记录了一些,可以结合的看。

C++初识

面向对象的三大特性

  1. 封装、继承以及多态

C++对C的扩展

::作用域运算符

  1. 通常情况下,如果有两个同名变量,一个是全局变量,另一个是局部变量,那么局部变量在其作用域内具有较高的优先权,它将屏蔽全局变量。
  2. 作用域运算符可以用来解决局部变量与全局变量的重名问题。作用域运算符可以用来解决局部变量与全局变量的重名问题,即在局部变量的作用域内,可用::对被屏蔽的同名的全局变量进行访问。

名字控制----C++命名空间(namespace)

  1. 标准C++引入关键字namespace(命名空间/名字空间/名称空间),可以更好地控制标识符的作用域。
  2. 命名空间只能全局范围内定义
  3. 命名空间可嵌套命名空间
  4. 无名命名空间,意味着命名空间中的标识符只能在本文件内访问,相当于给这个标识符加上了static,使得其可以作为内部连接

using声明

  1. using声明可使得指定的标识符可用。using声明相当于打开namespace,可以指定使用namespace中的标识符,如果不声明namespace内的其他标识符就直接无法使用。
//2. using声明
	using A::paramA;
	using A::funcA;
	cout << paramA << endl;
	//cout << paramB << endl; //不可直接访问
	cout<<<A::paramb<endl;//可以标明作用域访问

  1. 如果命名空间包含一组用相同名字重载的函数,using声明就声明了这个重载函数的所有集合。

using 编译指令

  1. using编译指令使整个命名空间标识符可用.。注意:使用using声明或using编译指令会增加命名冲突的可能性。也就是说,如果有名称空间,并在代码中使用作用域解析运算符,则不会出现二义性。

C++对C的增强

全局变量检测增强

C++中所有的变量和函数都必须有类型

  1. 在C语言中,int fun() 表示返回值为int,接受任意参数的函数,int fun(void) 表示返回值为int的无参函数。
  2. 在C++ 中,int fun() 和int fun(void) 具有相同的意义,都表示返回值为int的无参函数。

更严格的类型转换

struct类型加强

  1. c中定义结构体变量需要加上struct关键字,c++不需要。
  2. c中的结构体只能定义成员变量,不能定义成员函数。c++即可以定义成员变量,也可以定义成员函数。

“新增”bool类型关键字

  1. bool类型只有两个值,true(1值),false(0值)
  2. bool类型占1个字节大小
  3. 给bool类型赋值时,非0值会自动转换为true(1),0值会自动转换false(0)
  4. c语言中也有bool类型,在c99标准之前是没有bool关键字,c99标准已经有bool类型,包含头文件stdbool.h,就可以使用和c++一样的bool类型。

三目运算符功能增强

  1. 在c++中可以放在赋值操作符左边的是左值,可以放到赋值操作符右面的是右值。
    有些变量即可以当左值,也可以当右值。
    左值为Lvalue,L代表Location,表示内存可以寻址,可以赋值。
    右值为Rvalue,R代表Read,就是可以知道它的值。
    比如:int temp = 10; temp在内存中有地址,10没有,但是可以Read到它的值。

C/C++中的const

  1. c语言中const修饰的只读变量是外部连接的。
  2. 在c++中,一个const不必创建内存空间,而在c中,一个const总是需要一块内存空间。在c++中,是否为const常量分配内存空间依赖于如何使用。一般说来,如果一个const仅仅用来把一个名字用一个值代替(就像使用#define一样),那么该存储局空间就不必创建。
  3. 不过,取一个const地址, 或者把它定义为extern,则会为该const创建内存空间。
    在c++中,出现在所有函数之外的const作用于整个文件(也就是说它在该文件外不可见),默认为内部连接,c++中其他的标识符一般默认为外部连接。
  4. c语言全局const会被存储到只读数据段。c++中全局const当声明extern或者对变量取地址时,编译器会分配存储地址,变量存储在只读数据段。两个都受到了只读数据段的保护,不可修改。
  5. c语言中局部const存储在堆栈区,只是不能通过变量直接修改const只读变量的值,但是可以跳过编译器的检查,通过指针间接修改const值。
  6. 尽量以const替换#define
  7. const有类型,可进行编译器类型安全检查。#define无类型,不可进行类型检查.
  8. const有作用域,而#define不重视作用域,默认定义处到文件结尾.如果定义在指定作用域下有效的常量,那么#define就不能用。在这里插入图片描述

引用

引用基本用法

  1. 引用是c++对c的重要扩充。在c/c++中指针的作用基本都是一样的,但是c++增加了另外一种给函数传递地址的途径,这就是按引用传递(pass-by-reference),它也存在于其他一些编程语言中,并不是c++的发明。
  2. Type& ref = val;
  3. //int& ref; //报错:必须初始化引用
  4. 可以建立对数组的引用。
  5. 最常见看见引用的地方是在函数参数和返回值中。当引用被用作函数参数的时,在函数内对任何引用的修改,将对还函数外的参数产生改变。当然,可以通过传递一个指针来做相同的事情,但引用具有更清晰的语法。

引用的本质

  1. 引用的本质在c++内部实现是一个指针常量.
  2. c++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同,只是这个过程是编译器内部实现,用户不可见。
    在这里插入图片描述

后记

Day01的笔记就回顾于此吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值