本片博客是作者在学习c++的过程中的笔记记录,希望和各位读者一起学习交流
文章目录
包含头文件“”和<>的区别
<> 是使用标准的头文件
“”是使用自己定义的头文件,如果找不到自己定义的头文件,就去找标准的头文件,如果还找不到就报错
C++为了和C区别,规定头文件不使用.h
如:<iostream>和<iostream.h>
第一个是c++使用的
第二个是c使用的
命名空间(namespace)
目的:为了解决开发时的命名冲突的问题,c++引入了命名空间(namespace)
命名空间:
命名空间将全局作用域分成不同的部分
不同命名空间中的标识符可以同名而不会发生冲突
命名空间可以相互嵌套
全局作用域也叫默认命名空间
namespace是c++中的关键字,用来定义一个命名空间
用法:
namespace name{
//variables, functions, classes
}
name是命名空间的名字,它里面可以包含变量、函数、类、typedef、#define 等,最后由{ }包围。
在使用命名空间中的变量的时候,要指明其所在的命名空间。
:: 称为域解析操作符,用来指明要使用的命名空间
除了直接使用域解析操作符,还可以使用using关键字来声明。
using既可以声明命名空间中的部分关键字,也可以声明全部全部的命名空间
1. 声明命名空间中的部分名称:using std::cout
2. 声明整个命名空间:using namespace std;
public、private和protected
这三个关键字有两种使用的地方:
1. 对类中的成员进行访问范围的设置
2. 子类与父类之间的继承方式
类中访问权限的设置
1. private:只能由该类中的函数,其友元函数访问,不能别任何其他访问,该类的对象也不能进行访问
2. protected:可以被该类中的函数、子类中的函数以及友元函数访问,但不能被该类的对象访问
3. public:可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象进行访问
类的继承:
1. private:父类中的所有方法在子类中变为private
2. protected:父类的protected和public方法在子类中变为protected,private方法不变
3. public:父类中的方法属性变化
struct和class的区别
struct和class这两个关键字都是进行数据类型的定义
在用struct关键字定义类时,所有成员的默认值是public
在用class关键字定义类时,所有成员的默认值是private
c++对c的加强
1. 增加了命名空间(namespace)
2. "实用性"增加
C语言中的变量都必须在作用域开始的位置进行定义
C++中强调语言的“实用性”,所有的变量都可以在需要的时候进行定义
3. register关键字(register关键字请求将其修饰的变量存放在寄存器中)
4. 变量检测的增强
在c语言中,重复定义多个同名的全局变量是合法的
在c++中,不允许定义多个同名的全局变量
c语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上
5. struct类型加强(可以完成和class一样的功能)
C语言的struct定义了一组变量的集合,C编译器不认为这是一种数据类型
C++中的struct是一个新类型的定义声明
6. C++中所有的变量和函数都必须有类型
在c语言中
int f();表示返回值为int,接受任意的参数
int f();表示返回值为int的无参函数
在c++中
int f()和 int f(void)都表示返回值为int的无参函数
7. 新增加了bool类型关键字
原始的c语言是没有bool关键字的,在c99之后就可以支持bool关键字了
因此可以说bool是c++新增的关键字
8. 三目运算符:
a. 在c语言中,三目运算符的返回值是变量的值
在c++中,三目运算符返回的是变量的本身
b. 在c语言中,实现三目运算符的返回值做左值
左值:可以进行修改的内存空间(在c语言中,三目运算符不可以当左值,在c++中,三目运算符可以当左值)
*(a < b?&a:&b) = 30 首先表达式返回的是一个地址,进行*运算可以进行修改地址中的内容
而在c++编译器完成了取地址这步工作
const专题
- const的基本用法
- const int a; 代表一个长整型数
- int const b; 代表一个长整型数
在c语言中不能进行直接修改,但是可以进行间接修改(即通过指针进行修改),因此const不起作用
但是在c++中const是一个真正的常量,不能通过指针进行变量的修改
C语言中:
输出值为:20 20
C++中:
输出值为:10 20
出现这样的原因是c++中有一张符号表(键值对的形式),程序进行运行的时候,产生一张这样的表,不可以修改这张表,在执行代码 int *p = (int *)&a 的时候,会单独的开辟一块空间,让p进行指向 - const char *c(常指针); c是一个指向常整型数的指针(所指向的内存数据不能被修改,但是本身可以被修改)
- char * const d; d是指针常量(指针变量不能被修改,但是它所指向的内存空间可以被修改)
- const char * const e; e是一个指向常整型的常指针(指针和它所指向的内存空间,均不能被修改)
- const分配空间的时间是在程序编译期间进行分配的内存
- const和define的区别
相同点:
都是进行常量替换
不同点:
const常量是由编译器处理的,提供类型检查和作用域检查
宏定义由预处理器处理,只是单纯的文本替换
下面的是笔者的微信公众号,欢迎关注,会持续更新c++、python、tensorflow、机器学习、深度学习等系列文章