C++语法

c++基础语法(.cpp)

变量声明:

变量声明类似初始化,注意声明范围,局部变量和全局变量,数组为组合类型

输入输出:

scanf:输入,淘汰不安全,%x:ASCLL码值类型,%s,数组类型

scanf_s(“%s”,&str ,10),输入数组,设定大小输入

memset():按大小设定变量,_s设定范围更多参考帮助c语言中文网 http://c.biancheng.net/cpp/biancheng/cpp/rumen_13/
;c中变量和c++中变量声明,c为暂存于变量名中,c++直接替换&取地址符作用于此

cin,cout:常规,键盘输入输出,不可有空格,>>,<<提取符

cout<<endl;换行

CUP寄存器:eax,edx,ecx等意义?

EAX寄存器以称为累加器,AX寄存器是算术运算的主要寄存器,所有的输入、输出只使用十六进制AL或AX作为数据寄存器

ECX:计数暂存器, 重复(REP)前缀指令和LOOP指令的内定计数器

EDX:资料暂存器 ,例如放整数除法产生的余数

宏定义,有无区分C++与c

const与指针(指向)

封锁:int* const p1 = &a;//指向为常性,封锁指向能力,只能读常,指向能力形同于安全性

引用

*:int *p=10;

释放指针只是释放指向关系——>失效指针——>释放后指向空避免(空指针)

野指针——>未声明指针

&:万能引用const int &c=a,指针需要断言,引用不用(多叠加从右往左解释,引用非类型,故可*****&,而&*非法),相当于*****const

特点:(1)、定义引用必须初始化,(2)、没有空引用,(3)、没有二级引用

引用同一个对象同义,故无二级

区别:

语法上:指针存储实体类型数据,引用为实体别名

程序中:指针需分配空间,引用不用

解引:指针使用需声明,引用不用

指针可以改变值,而引用不行——>指针可为NULL,引用不行

形参使用时,指针需断言,引用不用

sizeof(),参为指针时为指针变量大小,引用为原数据大小

指针无上限,引用只有一级(特点)

对引用操作会影响实体

函数中局部变量和对象无法以引用或指针返回

inline函数

内联函数:将函数定义为内联函数,内联到别的位置,以空间节省时间(优化建议,声明和定义同时使用,避免链接错误),简单函数多次使用

与宏区别:

(1)、内联在编译展开,宏在预编译

(2)、内联函数嵌在目标代码中,带参宏为简单文本替换

(3)、内联函数有类型检测等功能,宏只是替换

缺省参数

声明时函数定义给形参缺省值(即给参数默认值获返回值的函数,从右往左,int(),int{}相当于0,不可调用声明默认值,形参名可省略),调用用实参会顶替默认值

函数重载

c++可以令函数同名,只要参数个数不同,或者类型不同即可(参数表不同),调用是会自动匹配

返回类型不能作为函数重载的根据,重载给缺省值会导致二义性,const只有指向能用作形参

值型:

左值lvalue:有名称有地址

右值rvalue:无地址,&&引用右值,int &&r=10

将亡值xvalue:

值型重载

名字粉碎(名字修饰)

编译时,用由函数名,参数,返回类型,类名,调用约定等共同决定的修士们标识函数

c只会_stdcall是api用栈的方式处理

宏测定判断,#ifdef_cplusplus

extern可定义为为c编写

函数模板

创造函数模板用来简化函数重载实现函数重用,生成实现代码的代码,是规则的重定义,非宏替换

temple<模板参数表>

返回类型 函数名(形式参数表)

{

}

名字空间namespace

c++三域:局部域,名字空间(相当于全局域),类域

namespace 空间名 //全局名字空间域(文件域)

{

​ 声明块

}

防止全局实体名冲突,命名冲突

注意可分层嵌套,起屏蔽作用,多文件多个同名最后合成到同一个命名空间内

使用:引入using namespace 名字空间

成员使用:using 被限定修饰的名字空间::类名::函数名(逐层)

作用域限定符使用:::

using cc=char[3];相当于typedef char[3] cc;查类型重命名?

typedef将合法变量定义为类型

using可和模板配合

temple<claas T,size N>

using array =T[N]

arrray<char,4>//main

array<int *,2>

new//delete

栈区:存放形参,局部变量等地址向下增长

堆区:程序动态内存分配向上增长

栈堆区别?

1、栈是系统自动分配,速度快,堆需要用户自己分配,速度较慢

2、栈申请指定空间不足会报异常,然后申请失败,堆区会将多余部分自动放入空闲位置

3、栈区申请连续内存,大小固定,堆区申请不连续,虚拟空间,获取空间大

4、栈,主函数下第一个命令地址入栈,堆先存大小

int *a=(int *) malloc (sizeof(int));

a=(int *)realloc(p,sizeof(int)n10)要释放原空间所以——

int *a=realloc(p,sizeof(int)n10

动态内存管理:new:(1)、作为运算符使用

new会自动计算大小并分配, int *p=new int(10);

int ip=new int[10];相当于new(ip) int****[10]

对应释放空间delete,一组数据前加[],delete []ip;

int *w=new(nothrow) int[10];可阻止运行异常,默认成所分配内容均为NULL,初始化,返回地址

(2)、函数使用

int *a=(int *)::operator new(sizeof(int));相当于(int *)malloc(sizeof(int))

(int *)::operator new(sizeof(int),nothrow);对应:: operation delete

(3)、定位

(placement new expression)

new(a) int(10);不申请追加,容易越界

内置类型可混用

类型推导:

auto初始化时,可编译时自动推导出变量类型,auto a=10;

不可批初始化不同类型,&和·*可推导出const与volatile属性,

可做函数形参使用

限制:

1、无法推演出数组(无法区分数组和结构体的{})解决换成&

2、无法成为模板参数

3、不能用作函数参数

4、不能用于非静态成员变量

decltype:decltype(表达式),抽取表达式类型,decltype(a)y;可做形参

基于范围的for

for(elemtype val:array)

{

}

范围变量名称val在范围数组array内每个元素迭代一次,含auto可const避免无法指向

指针空值——nullptr

NULL被定义为字面常量0或空指针,怎么区分?关键字nullptr代表空指针

nullptr隐式转换为指针类型

静态联编,编译结束时释放空间,动态联编,运行时释放空间

string使用

#include字符串库,c++,std::string 直接用作定义字符串类型

#include<string.h>字符串函数库,c

.at()遍历字符串同字符串数组

面向对象的编程

面向过程:自上而下,用封装逐步实现

对象的状态:静态属性,内部信息变量

对象的行为(方法):函数,

class为类型声明符,不分配空间,故extern、auto、register都不能用

访问限定符:public(公有)可外部访问实体对象,private(私有的)和protected(保护的,继承是类似公有)皆不可外部访问,访问符.

和结构体区别:结构体默认都可访问,class默认private不可访问(封装性)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值