C++学习

1、继承

继承允许我们有一个相互关联的类的层次结构,它允许我们有一个包含公共功能的基类,然后允许我们从那个基类中分离出来,从最初的父类中创建子类

目的:避免代码重复

以下代码中Entity类是父类,Player类是子类,子类继承了父类的所有公共内容

std::cout<< sizeof(Entity) << std::endl

输出为8(因为float占4字节,两个8字节)

std::cout<< sizeof(Player) << std::endl

输出为12(char指针占4字节,Entity中有8字节,一共12字节)

复制代码
class Entity
{
public:
    float X,Y;
    
    void Move(float xa,float ya)
    {
        X += xa
        Y += ya
    }
};

class Player : public Entity
{
    const char* Name;
    
    void PrintName()
    {
        std::cout << Name << std::endl;
    }
};

2、虚函数

虚函数允许我们在子类中重写方法。假设我们有两个类A,B,B是由A派生出来的,即B是A的子类,如果我们在A中创建一个方法,标记为virtual,我们可以在B中重写这个方法,让它做其他的事情。

虚函数引入了一种动态联编(Dynamic Dispatch)的东西,它通常通过v表(虚函数表)来实现编译,v表就是一个表,它包含基类中所有函数的映射,这样我们可以在运行它时,将它们映射到正确的覆写(override)函数

虚函数的运行成本:

1)我们需要额外的内存来存储v表,这样我们可以分配到正确的函数包括基类中要有一个成员指针指向v表

2)每次调用虚函数时,我们需要遍历v表,来确定要映射到哪个函数,这是额外的性能损失

相关推荐
叼烟扛炮2 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节
m4Rk_4 小时前
【论文阅读】Agent 记忆机制(113):Agentic Memory Management——从“检索相关信息”走向“管理 Agent 内部记忆”
论文阅读·人工智能·学习·开源·github
辣知4 小时前
辣知·化智92 《山海经》里的史前密码
学习
鬼手点金5 小时前
KV Cache 未必是一次性的:可编辑、可组合的“笔记”
java·人工智能·笔记·学习·自动化·1024程序员节
kyrie_sakura6 小时前
大模型学习18 大模型学习 - LangChain2_Model I/O
学习·自然语言处理
宝绿特塑业再生科技6 小时前
板材收缩率不稳,户外家具装配尺寸为何对不上:从切割尺寸变化到接缝不一的系统性排查与对策
笔记·科技·学习·生活·户外家具·hdpe再生颗粒·hdpe
~城南花已开~7 小时前
Intel E810 SR-IOV VF Spoofcheck 防伪造测试-KVM3
服务器·网络·笔记·学习·ubuntu·etl工程师
我命由我123459 小时前
6-3.Python 异常处理 - 异常处理进阶(else 块与 finally 块、异常传递、自定义异常)
开发语言·前端·数据库·后端·python·学习·java-ee
外收内放10 小时前
FastAPI猜字谜实战(8):收官
开发语言·python·学习·fastapi
David猪大卫10 小时前
【C++修炼】STL容器—stack与queue
c语言·开发语言·数据结构·c++·经验分享·笔记·学习