C++面向对象笔记(1):起航篇(C++新增基础知识)

本文围绕C++基础展开,介绍了C++新增的bool类型,阐述了const与指针、引用的使用及权限范围,说明了函数参数默认值、函数重载、内联函数的规则和特点,还对比C语言讲解了C++的内存管理,强调内存分配验证和避免野指针。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数据类型

C++新增了bool类型。

在这里插入图片描述

2.const与指针类型

const使用对比1,修饰 指针/常量 对比:

//1和2等价
const int *p = NULL;// p是指针,const对指针进行修饰,将限制通过指针修改p指向的数据;故不能通过此指针修改其指向的数据的值。
int const *p = NULL;

int * const p = NULL;// p是常量,然后int *将常量修饰为指针,则整体为指针常量;故不能修改指向。

const使用对比2:

// 完全等价
const int * const p = NULL;
int const * const p = NULL;

// 示例1
const int x = 3;
const int * const p = &x;// int * const p是常量指针,指向const int这个整型常量

p = &y;// 错误
*p = 4;// 错误
x = 5;// 错误

// 示例2
int x = 3;// 这里不用const修饰
const int * const p = &x;

p = &y;// 错误
*p = 4;// 错误
x = 5;// 正确
// 引用也是一样的情况,如果x不用const修饰,则直接通过x修改是可以的。

在声明变量和其指针时,const的使用:

// 错误1,无法通过编译
const int x = 3;
int *y = &x;

// 正确1
int x = 3;
const int *y = &x;

// 正确2
const int x = 3;
const int *y = &x;

我们也可以用权限范围对此进行理解:

const使用对比1,对比2 的代码注释中有写对const和*修饰的作用,。

我们先看上方正确1 的代码,我们可以直接使用x进行写、读操作(修改/获取数据),但是y因为有const修饰,所以只能通过y进行读操作(获取数据)。显然,x的权限范围 大于 y的权限范围,所以这里可以将&x赋给y。

再来看正确2 ,x只能进行读操作,y也只能进行读操作,x的权限范围 等于 y的权限范围,所以这里也是正确的。

最后看错误1 的代码,x只能进行读操作,但y能进行读、写操作。x的权限范围 小于 y的权限范围,所以&x是无法赋给y的,故这种写法一定是错误的。

3.const与引用(&)

int x = 3;
const int &y = x;// y为x,const修饰引用,将限制通过引用修改其指向的数据;故不能通过y修改它指向的数据的值。

x = 10;// 正确
y = 20;// 错误

4.函数参数默认值

函数的参数列表:

// 正确
void fun(int i, int j = 5, int k = 10);

// 错误,k没有默认值,不应该放在最右边
void fun(int i, int j = 5, int k);

注意:有默认参数值的参数,必须在参数表的最右端

声明和定义:

// 声明
void fun(int i, int j = 5,int k = 10);
// 定义
void fun(int i, int j, int k){
    cout << i << j << k;
}

注意:在声明中写默认值即可,如果写在定义中,有的编译器可能会无法通过。

5.函数重载

相同作用域内,用同一个函数名定义的多个函数,参数个数参数类型不同。

6.内联函数-inline

效率高,适合频繁调用的函数,不过有条件。

要求逻辑简单(不能有for等循环体)、不能是递归函数。

对编译器来说inline是建议性的,是否编译成内联函数还是由编译器根据情况决定的。

故,内联可以说只是一种编译的方式。

7.内存管理

和C语言对比:

// C
void *malloc(size_t size);
void free(void *memblock);

// C++
int *p = new int;
delete p;

注:new、delete是运算符。

块内存操作:

int *arr = new int[10];
delect []arr;

[重要]内存分配有失败的风险,所以需要验证:

int *p = new int[1000];
if(NULL == p){
    // 内存分配失败
}

[重要]内存释放完毕,也需要将指针指向NULL,绝对不要留下野指针

// 1.内存申请和释放
int *p = new int;
if(NULL == p){
    // 内存分配失败
    // 异常处理
}
delete p;
p = NULL;// 务必这样做!

// 2.块内存申请和释放
int *p = new int[1000];
if(NULL == p){
    // 内存分配失败
    // 异常处理
}
delete []p;
p = NULL;// 务必这样做!

获取数组元素个数:

// C++中没有现成的获取数组元素个数的方法,只有自己写。
int count = sizeof(array) / sizeof(array[0]);

本篇为视频教程笔记,视频如下:

C++远征之起航篇

C++远征之离港篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值