C++知识点总结(持续更新)

159 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情

C++知识点

1.结构体:

1)概念:

一个或多个 同类型或者不同类型的数据 的数据的集合

2)字节对齐

8字节对齐

3)与类的区别:

结构上: 类中有构造函数和析构函数,类的成员变量默认为private

结构体中没有构造函数和析构函数,结构体的所有成员默认为public

存储: 类是 引用类型抽象的, 使用堆存储

结构体是 实值类型具体的, 使用栈存储

功能: 两者都可以声明构造函数,但结构体中 构造函数不能带参,类中无限制;

结构体不能声明析构函数,类无限制

结构体无法被继承,类可以被继承

结构体无法使用new ,类可以使用new初始化

4)如何选择结构还是类

a. 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些

b. 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个 对象分配附加的内存。在此情况下,结构的成本较低。

c. 在表现抽象和多级别的对象层次时,类是最好的选择

d. 大多数情况下该类型只是一些数据时,结构时最佳的选择

5)与C结构体区别:

C++中结构体可以有成员变量 也可以有函数,C中结构体不能有函数只能有数据类型 的数据

6)不定长结构体

即 结构体中含有指针

struct Node {
int a;
char * b;
};

2.引用

** 1)概念**

用来 给 变量起外号

** 2)何处使用**

类型标识符 &引用名 = 引用对象;

example :
int a = 10;

int &b = a;

3)与指针的区别:

a. 引用是给对象起别名,并没有额外占用内存,初始化时不能为空。指针占用了额外的内存空间(32位下4字节,64位下8字节);

指针指向某块内存,所以初始化的时候可以不用指向任何对象,但初始化的时候必须进行判空,但引用不需要;

b. 引用 其指向的内存地址不能改变,但内容可以改变 指针 指向的内存地址可以改变, 内容也可以改变

4)优缺点: 优点: 节省空间,尤其是在传输数据量过大的时候,效率高,节省空间 缺点: 引用一旦绑定了变量后,就不能改变内存地址 5) 左值和 右值引用 int a = 10; //左值:有确定的内存地址和内容,可以被赋值和多次使用 int &b = a; //右值 :没有名字的临时变量,不能被赋值,只能在一条语句中出现,如: 临时变量 int &&c = 10;

3.Const

1)作用:

关键字 ,表示不能被修改的意思

2)不同位置的用法

//const 修饰变量

int a = 10;

const int * a = &b;

int const * a = &b;

//const 在* 左边时,表示a的内存地址可以修改,但是内容不能被修改

int * const a = &b;

//const 在*右边时,表示a的内存地址不能被修改,但是内容可以修改

const int * const a = &b;

//*左右两边都有const时,表示a的内存地址,内容 都不能被修改

//const修饰函数

const int getvalue() const

//const 在函数头表示 返回值不能修改; const在函数尾 表示函数尾可读函数,成员不能被修改

{

int a = 10;

return a;

}

3) const与define的区别

作用方式:#define 只是单纯的字符替换,不进行数据检查;

const 会进行数据检查

作用地点:#define 作用于预编译阶段;

const 作用于程序的编译和运行阶段

存储方式: #define 有若干个备份,存储在栈区

const 只有一个备份,存储在堆区

#define 不可调试,const可进行调试

4.指针

1)概念:

本质: 指针就是地址,地址就是指针

2)一般指针:

即 变量的内存地址 = 指针

int a = 10;

int * p = &a;

3)函数指针

即 将函数的地址用指针来存储

适用场景: 函数回调

#include “stdafx.h”
#include
using namespace std;
void test()
{
cout << “Hello world” << endl;
}

int main()
{
//函数指针赋值, 最终两个都能输出 Hello World
void(*p)() = test;
p();
void(*p1)() = &test;
p1();
return 0;
}

4) 智能指针

概念

是指RII智能指针是RAII(Resource Acquisition Is Initialization,资源获取即初始化)机制对普通指针进行一次封装。 使得智能指针行为像是一个指针,但本质是一个对象。