怎么制作单页网站做特卖的购物网站

张小明 2026/1/7 17:39:43
怎么制作单页网站,做特卖的购物网站,网站建设如何收费,竞价账户托管公司一、基本原理1.虚函数#xff1a;用virtual关键字生声明的函数#xff0c;允许派生类重写2.虚表#xff1a;每个包含虚函数的类#xff08;或其派生类#xff09;会有一个全局唯一的虚表#xff0c;存储该类所有虚函数的地址3.虚指针#xff08;vptr#xff09;#x…一、基本原理1.虚函数用virtual关键字生声明的函数允许派生类重写2.虚表每个包含虚函数的类或其派生类会有一个全局唯一的虚表存储该类所有虚函数的地址3.虚指针vptr每个对象会包含一个指向其类虚表的指针通常在对象内存布局的开头当通过基类指针或引用调用虚函数时程序会通过对象的虚指针找到对应类的虚表在虚表中查找要调用的虚函数地址调用该地址对应的函数实现动态绑定。二、同名覆盖同名覆盖派生类中定义的与基类同名的函数覆盖了基类的同名函数导致基类的该函数在派生类作用域内不可直接访问的现象。其本质可分为两种场景需结合基类函数是否为虚函数区分场景1虚函数的同名覆盖即“重写”Override当基类函数是虚函数时派生类定义与基类“函数名、参数列表、返回值完全一致”协变除外的同名函数会覆盖基类虚函数的实现 —— 这是动态多态的核心覆盖效果在运行时生效根据对象实际类型确定调用哪个版本。场景 2非虚函数的同名覆盖即“隐藏”Hide当基类函数非虚函数时派生类定义与基类同名的函数无论参数列表是否相同会遮蔽基类的同名函数 —— 这是编译期的作用域遮蔽覆盖效果在编译时生效根据指针/引用的声明类型确定调用哪个版本。三、代码示例class Object { int value; public: Object(int x 0) :value(x) { cout Object endl; } virtual void add(int a) { cout Object::add: a endl; } virtual void func()const { cout Object::func: endl; } virtual void print()const { cout Object::print: endl; } }; class Base :public Object { int num; public: Base(int x 0) :Object(x 10), num(x) { cout Base endl; } virtual void add(int a) { cout Base::add: a endl; } virtual void func()const { cout Base::func: endl; } virtual void show() { cout Base::show: endl; } }; class Test :public Base { int sum; public: Test(int x 0) :Base(x 10), sum(x) { cout Test endl; } virtual void func()const { cout Test::func: endl; } virtual void print() const { cout Test::print endl; } virtual void show() { cout Test::show: endl; } }; int main() { Test test; return 0; }执行Test test;时完整流程含 vptr 设置 成员初始化1.分配 Test 对象内存内存中包含vptr Object::value Base::num Test::sumvptr 初始为野指针。2.执行 Object 构造函数第一步设置 vptr 指向Object的虚表第二步执行 Object 的初始化列表value(x)x20由 Base 传递而来第三步执行 Object 构造函数体你的代码中无额外逻辑仅输出 ObjectObject 构造完成。3.执行 Base 构造函数第一步设置 vptr 指向Base的虚表第二步执行 Base 的初始化列表Object(x10)已执行完毕、num(x)x10由 Test 传递而来第三步执行 Base 构造函数体输出 BaseBase 构造完成。4.执行 Test 构造函数第一步设置 vptr 指向Test的虚表第二步执行 Test 的初始化列表Base(x10)已执行完毕、sum(x)x0默认参数第三步执行 Test 构造函数体输出 TestTest 构造完成。派生类向基类传参1.传参入口派生类构造函数通过 初始化列表 给直接基类传参不能在构造函数体内传2.传递规则多层继承时参数按 “最派生类→中间基类→顶层基类” 逐层传递每层都可对参数加工如x103.默认值优先级若派生类给基类传了参数基类构造函数就不用自己的默认值没传参时基类才用自身默认值。例Test test;无显式传参Testx0 默认值→ 给 Base 传01010Base收 10→ 给Object传101020最终顶层基类Object用20初始化自身成员。注意1.无论继承多少层一个对象只有一个vptr多层继承的vptr是 “覆盖更新”而非“多个 vptr 并存”2.vptr的设置是“构造函数内的第一步”早于成员初始化这是 C 的规定目的是避免构造期间调用虚函数时意外访问到子类中未初始化的成员导致内存错误或逻辑异常3.构造期间 vptr 指向“当前正在构造的类的虚表”因此构造函数内调用虚函数不会触发多态比如 Object 构造时调用add只会调用Object::add不会调用 Base 或 Test 的版本。四、纯虚函数和抽象类纯虚函数是C中一种特殊的虚函数它在基类中声明但不提供实现强制要求派生类必须重写该函数。纯虚函数的声明格式为virtual 返回类型 函数名(参数列表) 0;含有纯虚函数的类称为抽象类只要含有纯虚函数这个类就是抽象类类中只有接口没有具体的实现方法所以抽象类不能实例化对象继承纯虚函数的派生类如果没有完全实现基类纯虚函数依然是抽象类不能实例化对象。抽象类的使用规则1.抽象类只能作为其他类的基类不能创建抽象类的对象2.抽象类不能用作参数类型、函数返回值类型或显式类型转换3.可以定义抽象类的指针和引用此指针可以指向引用可以引用它的派生类从而实现运行时多态。五、面试常见问题为什么构造函数不能定义成虚函数虚函数能实现动态多态本质是依赖虚指针vptr和虚函数表vtable每个含虚函数的对象都有一个vptr指向所属类的 vtable而vptr的初始化是构造函数执行的第一步—— 进入构造函数后先把 vptr 指向当前类的 vtable再初始化成员变量。若构造函数是虚函数调用虚函数需要通过 vptr 查找 vtable但 vptr 要等构造函数执行才会初始化相当于“要调用虚构造函数必须先有 vptr但 vptr 要等构造函数执行才存在”形成逻辑死循环。为什么基类的析构函数要声明为虚函数如果基类析构函数不是虚函数通过基类指针删除派生类对象时只会调用基类的析构函数导致派生类的资源泄漏。当基类的析构函数不是虚函数时通过基类指针删除派生类对象时会发生以下过程编译阶段编译器根据指针 / 引用的声明类型Object将析构函数调用绑定到基类的析构函数~Object()。运行阶段程序执行时只会调用编译阶段绑定好的基类析构函数而派生类的析构函数完全不会被触发因此派生类析构函数不会被调用。当基类析构函数是虚函数时通过基类指针删除派生类对象时过程如下​​​​​​​运行阶段程序根据指针实际指向的派生类对象找到派生类的析构函数并调用派生类析构函数执行完毕后会自动调用基类的析构函数这是 C 的默认规则派生类析构函数执行时会隐式调用基类的析构函数保证基类部分的资源被释放最终派生类对象的派生部分和基类部分都会被完整销毁。虚函数和纯虚函数的区别虚函数和纯虚函数可以出现在同一个类中该类称为抽象基类。含有纯虚函数的类称为抽象基类使用方式不同虚函数可以直接使用纯虚函数必须在派生类中实现后才能使用定义形式不同虚函数在定义时在普通函数的基础上加上 virtual 关键字纯虚函数定义时除了加上virtual 关键字还需要加上 0;虚函数必须实现否则编译器会报错对于实现纯虚函数的派生类该纯虚函数在派生类中被称为虚函数虚函数和纯虚函数都可以在派生类中重写析构函数最好定义为虚函数特别是对于含有继承关系的类析构函数可以定义为纯虚函数此时其所在的类为抽象基类不能创建实例化对象。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

怎样免费做彩票网站网站主题切换

Grafika项目深度解析:Android图形开发的完整指南 【免费下载链接】grafika Grafika test app 项目地址: https://gitcode.com/gh_mirrors/gr/grafika Grafika是由Google开发的开源项目,专注于展示Android平台上的图形和媒体功能。这个项目为Andro…

张小明 2026/1/6 13:28:38 网站建设

怎样利用网站做引流外贸公司英文

第六章 结论与未来工作 6.1 主要研究结论 本研究深入探讨了医疗AI在临床落地中的核心矛盾,即如何从“模型能答”迈向“系统可信、可用、可追溯”。为解决此矛盾,我们创新性地提出并详细设计实现了一套基于模型上下文协议(MCP)的**“可插拔式临床AI工具链”**架构。通过将复…

张小明 2026/1/7 6:28:51 网站建设

模板网站制作最近时政新闻10条

编程中的条件判断与循环结构详解 在编程领域,条件判断和循环结构是非常重要的基础概念,它们可以帮助我们根据不同的情况执行不同的操作,或者重复执行某些代码块。下面将详细介绍条件判断和循环结构的相关知识,并结合具体的代码示例进行说明。 1. 文件格式转换脚本 在处理…

张小明 2026/1/6 12:23:57 网站建设

鲅鱼圈做网站优质网站

温馨提示:文末有资源获取方式数字化浪潮下的本地服务变革:在移动互联网深度渗透的今天,整合本地资源的线上平台已成为连接商家与用户的高效桥梁。一个功能完备的本地生活服务系统,不仅能够满足用户多元化、即时性的需求&#xff0…

张小明 2026/1/7 6:46:49 网站建设

松滋做网站wordpress目录检索

格式介绍 - AppImageAppImage 是 Linux 系统中一种新型的软件包格式,它与 rpm、deb 这些软件包格式相比最大的不同便是:(1)无需安装,即用即删。(2)只需打包一次,便可到处运行。完美的…

张小明 2026/1/7 7:01:47 网站建设

开发网页游戏公司官网优化

代码<?php /*** 处理时间戳并补位至1024位&#xff1a;所有元素&#xff08;片段简评简拼字符&#xff09;随机排序后补充随机字符至1024位* param mixed $timestamp 时间戳&#xff08;支持10/11位&#xff0c;自动补零到13位&#xff09;* param mixed $futureWindow 未来…

张小明 2026/1/7 8:09:45 网站建设