当前位置: 首页 > article >正文

【C++总览】

基础篇

C/C++的区别

面向对象三大特性:封装、继承、多态

封装:

封装是指将数据和操作这些数据的方法捆绑在一起,形成一个类。封装的核心思想是隐藏对象的内部实现细节,只暴露必要的接口给外部使用,保护数据的安全性和完整性。

  • 数据隐藏:通过控制类的成员的访问权限,避免外部直接访问或修改类的内部状态。
  • 接口暴露:只通过公开的方法来访问和修改类的内部数据。

继承:

继承是指子类可以继承父类的属性和方法。子类可以扩展或修改父类的功能,从而实现代码的重用和层次化结构。

  • 父类(基类):包含通用的属性和方法。
  • 子类(派生类):继承父类的属性和方法,增加特有的功能或修改父类方法。

多态:

多态是指同一个方法在不同的对象上有不同的表现。它允许不同的对象通过相同的接口来调用不同的实现。多态通过方法重写和方法重载来实现。

  • 方法重写:子类重新定义父类的方法,实现不同的行为。
  • 方法重载:同一个方法名根据参数的不同实现不同的功能。

面向过程与面向对象的区别

结构体与类的比较

指针与引用的区别

  • 指针是一个变量,存储另一个变量的地址。引用是对一个已经存在的变量起别名,不单独占用内存空间。
  • 指针可以多级,引用只有一级
  • 指针可以不初始化,引用必须初始化
  • 指针指向可变,引用不可变
  • 指针可以为空,引用不能为空
  • 对指针sizeof得到4或8,对引用sizeof得到引用对象所占大小

C++关键字

const

用来修饰函数、变量、对象,const在有些情况下是编译时确定,有些情况下是在运行时确定。

const与constexpr的区别

constexpr一定是在编译时确定。。。

static

static 类内

static 修饰成员属性:

1.不依赖对象,类共用的,不可以被继承(继承得到的是拷贝的一份属性,而静态成员只有一份,对象之间共享,所以不能继承),需要在类外初始化。

2.不能在.h文件初始化(重定义的问题),要在.cpp文件初始化。

static 修饰成员函数:

没有this指针,可以不依赖对象使用,类共用的,不可以声明为虚函数,不能直接调用类中的非静态成员,可以利用对象调用。

static 类外 

static 修饰类外函数:

只能在当前文件可见,不支持extern。
static 修饰类外变量:

1.只能在当前文件中可见。

2.一旦初始化后,生命周期贯穿整个程序的运行过程,并且只会初始化一次。

virtual

修饰虚函数,实现动态多态。父类是虚函数时,子类同名的成员函数默认是虚函数。

哪些函数不能被virtual修饰?

构造 static inline friend 类外的普通函数

inline

注:构造、析构函数可以是内联的,虚析构不能是内联。

friend

纯虚函数

operator重载操作符

自定义实现赋值重载操作符(如果不手动实现,编译期默认提供operator=函数,是浅拷贝)

1.浅拷贝

class A
{
private:
	int val;
public:
	A& operator = (const A& a)
	{
		//判断异常,查看a是不是当前的对象
		if (this == &a)return *this;
		//浅拷贝情况
		this->val = a.val;
		return *this;
	}
};
int main() {
	A a1;
	A a2;
	a1 = a2;
	a1 = a1;
}

2.对于含有指针成员的情况,考虑深拷贝

class A
{
private:
    int* val;
public:
    A()
    {
        val = new int;
    }
	A& operator = (const A& a)
	{
		//判断异常,查看a是不是当前的对象
		if (this == &a)return *this;
        //释放当前对象的旧内存(如果有)
        delete val;
        //为当前对象分配新的内存
        val = new int(*a.val);
        return *this;
	}
    ~A()
    {
        delete val;
    }
};

访问权限

构造函数

在手写智能指针时用到了浅拷贝。 

拷贝构造

初始化列表

虚指针的初始化也是在初始化列表中完成。 

析构函数

类与类

类之间的关系

在我之前的文章:类之间的横向关系

多态

静态多态

是编译时确定的(具体执行什么函数),可以通过函数重载、函数模板实现。

动态多态

通过继承和虚函数实现。只有程序运行的时候,才能确定具体执行什么函数。

动态多态优缺点

优点:代码不变,功能可变,具有良好的拓展和复用性

缺点:

1.空间消耗,运行效率会相对低一些,破坏封装

2.虚函数多态没有办法调用子类特有的虚函数

重载、重写、隐藏

重载:相同作用域下,函数名相同,参数列表不同(个数或类型),返回值可同可不同。

重写(覆盖):指子类实现了和父类虚函数相同的函数,包括函数名,参数列表以及返回值。

隐藏:子类中包含父类中的同名函数(返回值、参数列表不做要求),用子类对象调用时,会调用子类中的同名函数。如果想调用父类的同名函数,需要加父类作用域。无法通过父类指针指向子类对象调用子类的同名函数。

虚指针与虚表

C++11

在我之前的文章:C++11知识点

设计原则

在我之前的文章:设计原则

设计模式

在我之前的文章:设计模式

STL

在我之前的文章:C++之STL

多继承

在我之前的文章:C++之多继承

虚继承

在我之前的文章:C++之虚继承

内部类

在我之前的文章:C++之内部类


http://www.kler.cn/a/519766.html

相关文章:

  • SAP新增公司间交易的配置点---SD部分内容
  • c语言中的数组(上)
  • 深度学习项目--基于LSTM的糖尿病预测探究(pytorch实现)
  • 【Salesforce】审批流程,代理登录 tips
  • Android多语言开发自动化生成工具
  • 基于 Node.js 的天气查询系统实现(附源码)
  • Fossil源码在Windows下编译
  • Kafka运维宝典 (二)- kafka 查看kafka的运行状态、broker.id不一致导致启动失败问题、topic消息积压量告警监控脚本
  • 【DIY小记】减肥10kg保持半年的经验分享
  • 蓝桥杯试题:整数反转
  • Spring Data JPA 实战:构建高性能数据访问层
  • 基于SpringBoot的软件产品展示销售系统
  • w173疫苗发布和接种预约系统
  • 利用metaGPT多智能体框架实现智能体-1
  • Midjourney中的强变化、弱变化、局部重绘的本质区别以及其有多逆天的功能
  • Spring Boot - 数据库集成04 - 集成Redis
  • ceph基本概念,架构,部署(一)
  • 新手理解:Android 中 Handler 和 Thread.sleep 的区别及应用场景
  • 高并发问题的多维度解决之道
  • PyTorch广告点击率预测(CTR)利用深度学习提升广告效果
  • C++中的显式构造和隐式构造
  • docker设置开机自启操作
  • YOLO目标检测3
  • ShardingJDBC私人学习笔记
  • 【fly-iot飞凡物联】(20):2025年总体规划,把物联网整套技术方案和实现并落地,完成项目开发和课程录制。
  • 2025数学建模美赛|C题成品论文|第一问