汇编(低级语言) -> Fortran(formula translation) (第一个高级语言)(195x年)
-> B -> C(Dennis Ritchie 丹尼斯里奇)
贝尔实验室(AT&T->朗讯->诺基亚)
UNIX(LINUX前身) 操作系统:能够管理计算机资源,处理计算机与用户之间交互的“一组程序”。
C++与C语言相比 优势?
C语言特点: “面向过程”:注重的是数据与算法
过程化编程:首先确定需要计算机采取的操作,然后使用编程语言来实现;
问题: 可重用性差/可维护性差/无法满足用户需求
C++语言特点: “面向对象”:(OOP)object-oriented Programming
对象化编程:让语言满足问题的需求;
命名空间 namespace: 不同厂商可能推出不同的类库中含有相同名称的方法
namespace用来确定用哪一个厂商的方法(为了防止二义性)
1.不同namespace中的变量,函数,结构体;
2.namespace 可以嵌套
using声明/using编译指令
using声明:using NS1::a 后面所有的a都来自于NS1
using编译指令 using namespace std; cout / cin / system
const 常量修饰符
C语言中,const修饰的变量是一个常变量,本质上还是一个变量,有自己的存储空间;
并不是一个真正的常量
C++中,const声明的变量是一个真正的常量(没有自己的存储空间),无法间接被改变
const声明的变量 被放入“符号表”
key:常量修饰符、真正的常量、“符号表”
面试题:C++中const作用
1.const声明的变量是一个真正的常量(没有自己的存储空间),无法间接被改变
2.后续请期待
3.
4.
const与#define(宏定义)的区别
1.const可以指定数据类型;
2.所处时期不同:
#define是属于预处理阶段 (key:文本替换)
const是属于编译器处理阶段
3.const可以用于一些复杂的类型 如数组或者结构体
*#include
using namespace std; 标准命名空间standard
int main()
{
cout << "hello world!" << endl;
for(int i = 0;i < 10;i++) 实用性加强:什么时候用 可以什么时候定义
{
cout << i << "," ;
}
cout << endl;*
**struct类型加强:** C++中认为一个结构体就是一个新的数据类型,不需要用typedef
新增数据类型 bool 布尔类型(非0即1) 占用一个字节
bool a = false;
bool b = true;
b += 10;
cout << sizeof(a) << endl;
cout << b << endl;
任何数值或者指针都可以被隐式转为bool类型
sizeof / strlen
char *str = "1111abcd";
char arr[9] = {1};
cout << "sizeof(str):" << sizeof(str) << endl;
cout << sizeof(arr) << endl; 总结 sizeof和strlen的区别
**运算符**
单目运算符 ++ --
双目运算符 + - * /
三目运算符 ( ? :) C++中可以作为左值使用 =
int e = 10;
int f = 20;
/*int ret = e>f?e:f;*/
(e>f?e:f) = 40;
作为左值使用的时候,不能有常量
cout << "e:" << e << endl;
cout << "f:" << f << endl;
system("pause");
return 0;
}
C++中引用
引用可以看作一个“已定义变量”的“别名”;(互为别名)
(通过引用变量作为参数,函数使用原始数据,而不是副本)
这样的引用允许a和b互换使用;他们指向相同的值和内存单元,改变a就等于改变b;
意义?
在一些情况下 引用可以代替指针;(指针容易出错)
引用就有了更好的实用性和可读性
引用本质
引用占4个字节 (虽然引用是别名 但是他有自己的存储空间)
引用内部实现: Type &name – Type *const NAME (内部是用常指针实现)
引用作为函数返回值
返回栈变量可能会出错,尤其是再次使用的时候有可能会出错
尽量避免使用 函数返回值为引用(返回栈变量)
返回全局变量或者静态变量是可以的
常引用
const int &b = a; 作用:让b拥有只读属性,不能通过b来改变a
普通引用 int &b = a;
1 用变量初始化常引用
int a = 10;
const int& b = a;
2 可以用常量初始化常引用;
const int &a = 40;
普通引用不可以引用一个常量 int &a = 40错误!!!
此时这个a有了const修饰 变成一个只读变量
三种函数传参方法: 值传递 指针传递 引用传递
内存分区模型
1 代码区:存放函数体的二进制代码(操作系统管理)
2 全局区:静态变量、全局变量、常量
3 栈区:编译器自动分配释放,存放函数参数值,存放局部变量
4 堆区:程序员手动分配和释放,(指针)