C++开发(2)入门概念学习笔记
2018-01-03 22:34
597 查看
程序执行过程
Created with Raphaël 2.1.2开始01-源文件02-程序预处理03-编译04-链接05-生成可执行程序结束01-源文件:我们编写的源代码
02-程序预处理:预处理程序处理程序中预处理指令,将处理好的代码发送给编译器进行编译
03-编译:编译器进行编译,将源代码编译成目标代码
04-链接:目标代码和其他源码代码和C++库代码等进行链接
05-生成可执行程序:通过上面的过程生成可执行的程序
命名空间(namespace)
命名控件是指标识符的可见范围,C++标准程序库中的所有的标识符都被定义在一个名为std的命名空间中。为了避免程序设计中,标识符命名发生冲突。所以C++引入的命名空间。命名空间定义
namespace name{ } namespace name{ int i = 0; namespace name1 { //命名控件可以嵌套 int i = 0; } }
命名控件使用
int main() { using namespace name; int a; a = name::i; a = name::name1::i; return 0; }
使用注意
当使用iostream的时候,该头文件没有定义全局命名控件,必须使用namespace std;
这样才能正确使用cout等函数。若不引入using namespace std;可以使用std::cout方式使用.
C++标准为了和C区别开,不使用后缀.h的头文件 命名控件可以嵌套。
关键字register
这个关键字是请求编译器将局部变量存储到寄存器中。放到寄存器中的变量C语言无法获取内存地址,而C++仍然可以获取寄存器变量的内存地址。变量检测
在C语言中同时定义多个同名变量是合法的,在C++中不允许同时定义多个同名变量。关键字struct
在C++中struct是一个新类型的定义声明,在C中,C编译器并不认为这是一种新的类型。struct关键字和class关键子完成的功能是一样的,当时他们还是有区别的。C++类型检测
C++中所有的变量和函数都必须有类型。类型bool
该类型是C++新增的数据类型。值为:true和falseC++中非0值都为true
bool 类型占用一个字节。
三目运算符
在C语言中表达式的运算结果返回值是变量的值,不能作为左值。在C++语言中表达式的运算结果返回值是变量的本身,所以可以作为左值。
案例:
#include "iostream" using namespace std; int main() { int a = 10; int b = 20; (a < b ? a : b) = 30; cout << "a:" << a << endl; cout << "b:" << b << endl; return 0; }
这个案例的三元运算符在C语言中,会提示表达式不能作为左值,而在C++中编译运行通过
表达式在C语言中修改,能达到C++中的效果:
*(a < b ? &a : &b) = 30;
关键字const
const是定义常量。C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const.C++中const规则
const修饰指针变量时:
(1)只有一个const,如果const位于*左侧,表示指针所指数据是常量,不能通过解引用修改该数据;指针本身是变量,可以指向其他的内存单元。
(2)只有一个const,如果const位于*右侧,表示指针本身是常量,不能指向其他内存地址;指针所指的数据可以通过解引用修改。
(3)两个const,*左右各一个,表示指针和指针所指数据都不能修改。
(4)const修饰函数参数,传递过来的参数在函数内不可以改变
(5)const修饰成员函数,const修饰的成员函数不能修改任何的成员变量(mutable修饰的变量除外),const成员函数不能调用非onst成员函数,因为非const成员函数可以会修改成员变量
(6)const修饰函数返回值,如果返回const data,non-const pointer,返回值也必须赋给const data,non-const pointer。因为指针指向的数据是常量不能修改
(7)const修饰常量,不能通过引用来修改常量值。
C语言中的const
定义常量可以通过指针修改常量的值。在C++中定义的常量通过指针也不能修改
int main() { const int a = 10; int *b; b = (int *)&a; *b = 30; cout << a << endl; return 0; }
这段代码在C语言中最后的输出结果是30,但是在C++中输出结果为10。这个现象表明C++中的const 修饰常量,确实不能通过指针来修改值。
const与#define
C++中const常量类似宏定义
const int c = 5; ≈ #define c 5
C++中const常量在与宏定义不同
Const 常量是由编译器处理的,提供类型检查和作用域检查
宏定义有预处理处理,单纯的文本替换
所以C++中的const也用于替换程序中使用宏定义定义常量,使程序更严谨。
枚举(enum)
C++对C语言的枚举进行争强,C语言枚举本质就是整形,枚举变量可以用任意整形赋值,而C++中枚举变量,只能用被枚举出来的元素初始化。#include "iostream" using namespace std; enum MyEnum { aaa, bbb, ccc }; int main() { enum MyEnum s = aaa; if (s == aaa) { cout << "判断正确" << endl; } return 0; }
C++中的引用
C++中新增了引用的概念。引用可以看作一个已定义变量的别名。引用是C++的语法范畴。实际上就是为一个已经定义的变量起的别名。普通引用必须要初始化,只声明引用编译器会报错。引用语法:
Type& name = var;
int x = 10; int &y = x; //y就是X的引用 y = 100; cout << "x:" << x << endl; cout << "y:" << y << endl; //y就是x的别名
引用作为函数的参数
引用在作为函数的参数时,不进行初始化。因为引用是已经定义变量的别名。也就是说引用和变量名实际都指向一个内存地址,我们通过这个特性来实现两个变量交换数据的案例。
#include "iostream" using namespace std; void mySwap(int &x, int &y); int main() { int x = 10; int y = 100; mySwap(x, y); cout << "x:" << x << endl; cout << "y:" << y << endl; //y就是x的别名 return 0; } void mySwap(int &x, int &y) { int t = 0; t = x; x = y; y = t; }
交换两个变量的数据可以使用引用或者指针都能实现。引用作为气态变量的别名而存在,因此在某些场合可以代替指针。引用相对指针来说具有更好的可读性和实用性。
引用的本质
引用单独定义的时候,必须初始化。引用在C++中的内部实现是一个常量指针。因此引用占用的控件大小与指针相同。当实参传给形参应用的时候,只不过是C++编译器帮我取了一个实参地址传给了形参引用(常量指针)。
函数返回值是引用
当函数返回值为引用时:
若返回栈变量,不能成为其他引用的初始值,不能作为左值使用
若返回静态变量或全局变量,可以成为其他引用的初始值,即可作为右值使用,也可作为左值使用
指针引用
指针对指针起的别名
常引用
我们创建的引用是const修饰,那么我们不能通过引用来修改变量值。
常引用初始化
使用变量初始化引用 int a = 10; const int &d = a; //使用变量a初始化常引用 使用字面量初始化 使用字面量初始化普通的引用,编译器报错,因为字面量没有自己内存地址。但是如果是const修饰的引用,可以使用字面量进行初始化。为什么呢?const引用在初始化过程中,程序会为引用分配内存空间,而后将字面量存储到该内存空间中。
指针
一级指针:一个指针变量存储的是一个普通变量的地址,像这样的指针我们称之为一级指针二级指针:一个指针变量存储的是一级指针变量地址。称为二级指针
三级指针:一个指针变量存储的是二级指针变量地址。称为三级级指针
N级指针:一个指针变量存储的是(N-1)级指针变量地址。称为N级级指针
注意:
一级指针只能存储普通变量地址
二级指针只能存储一级指针变量地址
三级指针只能存储二级指针变量地址
N级指针只能存储N-1级执政变量地址
声明多级指针
void main() { int a = 10; int* b = &a; int** c = &b; cout << "a:" << a << " &a:" << &a << endl; cout << "b:" << *b << " &b:" << &b << endl; cout << "c:" << **c << " &c:" << &c << endl; system("pause"); }
b57a
相关文章推荐
- C++入门学习笔记(一)--面向对象基本概念
- 嵌入式开发学习笔记 ( java - c/c++ :从入门到入门 )
- 嵌入式开发学习笔记 ( java - c/c++ :从入门到入门 )
- 嵌入式开发学习笔记 ( java - c/c++ :从入门到入门 )
- Hadoop学习笔记-大数据开发 入门 初学者 基本概念
- C++学习笔记4-----类的继承基础概念
- c++学习笔记-------《c++自学通》第一章 入门
- 用c++开发sockets学习笔记
- Google.Android开发入门与实践-学习笔记2
- Google.Android开发入门与实践-学习笔记3
- c++入门学习笔记--类和对象
- Adroid学习笔记-入门资料以及V2.3系统开发环境搭建
- Oracle RAC学习笔记:基本概念及入门
- Oracle RAC学习笔记:基本概念及入门
- Android开发入门学习笔记之三
- c++入门学习笔记继承
- c++入门学习笔记指针篇
- gtk学习笔记1(安装c/c++和gtk开发环境)
- Google.Android开发入门与实践-学习笔记4
- c++入门学习笔记继承