持续创作,加速成长!这是我参与「掘金日新计划 · 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,资源获取即初始化)机制对普通指针进行一次封装。 使得智能指针行为像是一个指针,但本质是一个对象。