【C++】1.回顾C语言语法


1.回顾C语言语法

重难点:

1.函数的一些改变

2.命名空间


1.1回顾C语言

  1. 基本数据类型,运算符,表达式,语句
  2. 函数,数组,自定义数据类型
  3. 指针,预处理

了解C++

在这里插入图片描述


1.2新类型:bool

  1. what:用来描述真假

  2. why

  3. how

  4. sizeof(bool)

  5. 取值范围:true(真),false(假)

  • 简单来说就是bool类型只有truefalse两个取值,如果不取这两个随便取个数字就会溢出。在这里,对溢出采取的是非零为真
int main() {
   bool a = true;
   a = false;
   a = 123;   //这个是真的,会溢出
   a = 3.14;  //这个是真的,会溢出
   a = 0;     //这个是假的
   printf("%d\n", sizeof(bool));
   return 0;
 }

1.3内联函数

通过“内存膨胀”的方式,以空间换取时间的函数。

目的提高程序运行的速度

代价:有得必有失

内存膨胀:代码区代码变多占用更多空间,使用内联函数后就不去栈区了,少了个入栈出栈的时间。

inline void func(int num);//函数声明,多了个inline就是内联函数声明了

inline void func(int num) {
    printf("void func(int num); numm = %d\n", num);
}

int main() {
    func(6);
    return 0;
}

/*
inline 返回值类型 函数名(参数表){
    函数体;
}
*/
  1. 还是一个函数,该调用就调用。

  2. 是通过内存膨胀实现函数跳转的。

  3. 函数体不能太长,函数体里不建议写循环。

  4. 如果是简单的赋值或者返回的语句使用频率很高建议写成内联函数。


1.4函数重载

在同一个项目中定义的函数名字可以重复。

函数名必须一致。

函数的参数列表不同。(参数个数不同)(参数个数相同但对应位置上类型不同)

//错误示范
int func() {

}
float func() {

}

int main() {
    func();
    return 0;
}
----------------------------------------
//正确示范
int func(int n) {

}
float func() {

}

int main() {
    func();
    return 0;
}

为什么会这样呢?

因为调用func这个函数的时候,函数要传参。main函数里func();是一个不需要参数的函数,自然就调用float func()

如果main函数里func(5);是一个需要参数的函数,自然就调用int func(int n)

根据你的参数来选择重名的重载函数。

但是重载函数也有缺陷

int func(int n) {

}
float func(float v) {

}

int main() {
    func(3.14);//二义性
    return 0;
}

这里面入参是3.14,是double类型的。这里面没有double类型的。double类型是双精度,降一级就到单精度了。丢掉小数部分到整数,这个时候编译器就不知道去那个了。就会报错了。

这个时候要么加一个double的函数,要么把3.14后面写个f,或者(int)3.14。

也就是要么解决问题,要么解决提出问题的人。


1.5函数参数缺省

参数:形参,实参

缺省缺的是实参

函数参数缺省:声明函数某个参数的时候指定一个默认值,调用该函数的时候如果采用默认值,无需指定该参数。给形参一个默认值,这样之后传实参就少传一个。

默认这样:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void function(int num, float val) {   //形参
    printf("num=%d,val=%f\n", num, val);
}

int main() {
    function(6, 3.14f);   //实参
    return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void function(int num, float val = 0.0f) {
    printf("num=%d,val=%f\n", num, val);
}

int main() {
    function(6, 3.14f);
    function(8);//调用的时候形参少传一个值
    return 0;
}

在这里插入图片描述


要注意:

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
可以全部缺省,但是上面的参数要给全部缺省,但是上面的参数没给全,所以错了

在这里插入图片描述

函数已经有声明的情况下,只要声明的时候给值,定义的时候不要给。


在这里插入图片描述

这里定义了俩个function()函数,main()函数里的function();就不知道调用哪一个了。这种情况就会报错。

解决办法:

  • 要么删掉其中一个function();函数
  • 要么给function();里面传参

1.6引用

对一个变量或者对象取的别名。

定义应用的时候必须要初始化。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
    int num = 0;
    int& dd = num;    //int& 表示创建了引用
    printf("num=%d\n", num);
    dd = 10;
    printf("num=%d\n", num);

    return 0;
}

在这里插入图片描述

这里的dd和num对应的都是同一段内存


通过引用来方便书写

int main() {
    int gameControlNum = 9;
    int& gcn = gameControlNum;   //通过引用来方便书写

    return 0;
}

1.7命名空间

命名空间是用来组织和重用代码的编译单元。

通过命名空间来避免冲突,解决重名现象。

作用域符号**::**

在这里插入图片描述

怎么让namespace里面的func_2()调用外面的funcc_2()呢?除了指针,还可以用命名空间。

在这里插入图片描述

可以读作NAME_1里面的func_2()。

在这里插入图片描述


在这里插入图片描述

局部命名一个命名空间。


在这里插入图片描述

两个命名空间名字一样,说明这两个是同一个命名空间,也可以叫命名污染。

可以利用这个命名污染在不同的地方补充同一个空间。


在这里插入图片描述

命名空间取别名。方便记忆,增加代码可读性。


注意事项:

  1. 名字必须是合法标识符。

  2. 命名空间可以全局命名一个,也可以局部命名一个。

  3. 两个命名空间名字一样,说明这两个是同一个命名空间,也可以叫命名污染。

  4. 命名空间取别名。方便记忆,增加代码可读性。


1.8cin和cout

cin的作用类似scanf。

cout的作用类似于printf。他们在具体使用的时候有些区别。

使用cin和cout的时候要用#include <iostream>这个头文件。

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <iostream>
int main() {
    int num;
    //cin和cout是存放在std这个命名空间里面的。
    std::cin >> num;//进入num空间,输入的数字会赋值给num
    std::cout << num;//输出num

    return 0;
}

不想重复写命名空间

using namespace std;//不想重复写命名空间就写这个
int main() {
    int num;
    cin >> num;//进入num空间,输入的数字会赋值给num
    cout << num;//输出num

    return 0;
}

在这里插入图片描述


在这里插入图片描述


//如果不想写using namespace std;就这么写。因为std实际上蛮大的,这么写会没那么大。
using std::cin;
using std::cout;
using std::endl;

int main() {
    int num;
    cin >> num;//进入num空间,输入的数字会赋值给num
    cout << "num=" << num << endl;//输出num

    return 0;
}

1.9new和delete

new的作用类似于malloc,用来申请内存。

delete的作用类似free,用来释放内存。

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

上面两个只能释放单个内存空间。

最后一行可以释放连续的内存空间。从p3所存储的首地址,一直释放到你申请的时候做标记的地方。

在这里插入图片描述

比如上面申请的时候申请了10个空间,申请的首地址存在p3里面,然后10个int也就是40个字节结束的时候,会做一个你不知道的标记,这个标记你释放的时候就会释放到 这个做了标记的地方。


注意:

  1. 初始化用(),批量申请用[ ]。
  2. 释放连续的内存空间,delete后面要加[ ]
  3. delete释放的时候,从前往后释放,所以要从首地址释放,不然会有部分没释放。
  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值