折纸效果网站建设网站怎么添加端口映射
2026/4/17 12:50:47 网站建设 项目流程
折纸效果网站,建设网站怎么添加端口映射,网站关键词推广方案,深圳网站空间多态#xff08;Polymorphism#xff09;#xff1a;是面向对象编程#xff08;OOP#xff09;的三大核心特性之一#xff0c;它允许同一操作作用于不同的对象时#xff0c;可以产生不同的行为。简单说#xff0c;就是 “一个行为#xff0c;多种形态”#xff0c;通…多态Polymorphism是面向对象编程OOP的三大核心特性之一它允许同一操作作用于不同的对象时可以产生不同的行为。简单说就是 “一个行为多种形态”通过统一的接口处理不同类型的对象从而提高代码的灵活性和可扩展性。多态的本质“一种接口多种实现”以下从 C 的角度分编译时多态和运行时多态详细解析多态的核心价值是解耦“接口使用”和“具体实现”调用者只需关注 “做什么”接口无需关心 “怎么做”具体实现不同对象通过同一接口调用时会自动执行自身的实现逻辑C 中的多态分类编译时多态静态多态和运行时多态动态多态核心区别在于确定调用哪个实现的时机编译阶段 vs 运行阶段------------多态的实现------------① 静态多态的实现静态多态通过函数重载或模板编译期根据调用参数确定具体执行的函数。特点行为确定于编译阶段效率高属于 “静态绑定”。示例 1函数重载同一作用域的同名函数参数不同代码语言javascriptAI代码解释#include iostream using namespace std; // 重载根据参数类型/数量编译期确定调用哪个函数 int Add(int a, int b) { return a b; } double Add(double a, double b) { return a b; } int main() { //1.编译期确定调用 Add(int, int) cout Add(1, 2) endl; //2.编译期确定调用 Add(double, double) cout Add(1.5, 2.5) endl; return 0; }在这里插入图片描述示例 2模板泛型编程编译期生成具体代码代码语言javascriptAI代码解释#include iostream using namespace std; // 模板编译期根据 T 的类型生成对应函数 template typename T T Add(T a, T b) { return a b; } int main() { //1.编译期生成 Addint(int, int) cout Add(1, 2) endl; //2.编译期生成 Adddouble(double, double) cout Add(1.5, 2.5) endl; return 0; }在这里插入图片描述② 动态多态的实现动态多态通过虚函数和继承运行期根据对象的实际类型确定调用的函数。特点行为确定于运行阶段支持动态扩展属于 “动态绑定”。核心条件三要素继承派生类继承基类。虚函数基类声明 virtual 函数派生类重写override该虚函数。基类指针/引用通过基类指针或引用调用虚函数指向派生类对象。虚函数虚函数Virtual Function是在基类中声明的、使用virtual关键字修饰的成员函数。虚函数是 C 实现动态多态的核心机制。虚函数的目的是为派生类提供一个可重写的接口。虚函数会让程序在运行时根据对象的实际类型调用对应的函数实现。任务1基类声明虚函数代码语言javascriptAI代码解释/*---------------------定义“基类Shape类”---------------------*/ class Shape { public: virtual void Draw() //基类声明 virtual为派生类提供重写接口 { cout 画一个形状 endl; } };重写重写Override是派生类重新实现基类中已声明的虚函数让同一接口在不同派生类中有不同行为。重写是 C 面向对象编程中实现动态多态的关键机制。重写的严格规则三同原则 协变返回派生类重写基类虚函数时需满足以下条件否则会变成“隐藏”而非“重写”1. 三同原则基本规则函数名相同派生类函数名必须与基类虚函数完全一致参数列表相同参数的类型、数量、顺序必须完全一致返回值类型相同C 要求返回值类型严格一致除非是协变返回类型任务2派生类重写虚函数代码语言javascriptAI代码解释/*---------------------定义“派生类Circle类”---------------------*/ class Circle : public Shape { public: //1.派生类重写基类虚函数Draw() void Draw() { cout 画一个圆 endl; } }; /*---------------------定义“派生类Rectangle类”---------------------*/ class Rectangle : public Shape { public: //1.派生类重写基类虚函数Draw() void Draw() { cout 画一个矩形 endl; } };协变2. 协变返回特殊情况协变返回类型是指若基类虚函数返回基类指针/引用派生类重写的函数可返回派生类指针/引用仍视为重写。代码语言javascriptAI代码解释class Base { public: virtual Base* Clone() // 基类虚函数返回 Base* { return new Base(); } }; class Derived : public Base { public: Derived* Clone() // 派生类重写返回 Derived*协变返回 { return new Derived(); } };代码示例1运行时多态的实现代码语言javascriptAI代码解释#include iostream using namespace std; /*---------------------定义“基类Shape类”---------------------*/ class Shape { public: //1.基类定义虚函数Draw() virtual void Draw() //基类声明 virtual为派生类提供重写接口 { cout 画一个形状 endl; } }; /*---------------------定义“派生类Circle类”---------------------*/ class Circle : public Shape { public: //1.派生类重写基类虚函数Draw() void Draw() { cout 画一个圆 endl; } }; /*---------------------定义“派生类Rectangle类”---------------------*/ class Rectangle : public Shape { public: //1.派生类重写基类虚函数Draw() void Draw() { cout 画一个矩形 endl; } }; int main() { //1.基类指针指向派生类对象 Shape* shape1 new Circle(); Shape* shape2 new Rectangle(); //2.运行时根据对象实际类型调用对应 Draw 函数 shape1-Draw(); // 输出画一个圆Circle 的 Draw shape2-Draw(); // 输出画一个矩形Rectangle 的 Draw delete shape1; delete shape2; return 0; }在这里插入图片描述代码示例2运行时多态的实现代码语言javascriptAI代码解释#include iostream using namespace std; /*---------------------定义“基类Person类”---------------------*/ class Person { public: virtual void BuyTicket() //基类声明 virtual为派生类提供重写接口 { cout 买票-全价 endl; } }; /*---------------------定义“派生类Student类”---------------------*/ class Student : public Person { public: virtual void BuyTicket() //重写基类的虚函数 BuyTicket { cout 买票-打折 endl; } }; void Func(Person* ptr) //注意通过基类指针调用虚函数实际执行的是指针指向对象的重写版本 { ptr-BuyTicket(); /* 多态的核心逻辑 * 1.虽然调用的是 Person 指针的 BuyTicket * 2.但实际执行的函数由 ptr 指向的对象的真实类型决定Person 或 Student * 3.这就是运行时多态动态绑定的体现 */ } int main() { //1.创建“基类 派生类”的对象 Person ps; Student st; //2.调用 Func 函数分别传入“Person Student”对象的地址 Func(ps); //ptr 是 Person* 类型指向 Person 对象调用 Person::BuyTicket Func(st); //ptr 是 Person* 类型但指向 Student 对象调用 Student::BuyTicket重写版本 return 0; }在这里插入图片描述在这里插入图片描述------------多态的拓展------------1. override的意义与使用在 C 中派生类重写基类虚函数时即使派生类的函数不加virtual关键字也能构成重写。 这是因为基类的虚函数被继承到派生类后会自动保持 “虚函数” 的属性无需重复声明 virtual但这种写法不规范原因有二可读性差其他开发者阅读代码时无法直观识别这是虚函数重写。维护风险若后续修改基类如删除虚函数关键字 派生类的重写逻辑会被破坏且难以排查。因此C11 及以上建议用 override 关键字显式标记重写既规范又能让编译器帮你检查重写是否正确如函数名、参数不匹配时会报错 代码语言javascriptAI代码解释#include iostream using namespace std; /*---------------------定义“基类Animal类”---------------------*/ class Animal { public: virtual void makeSound() { cout 动物发出声音 endl; } }; /*---------------------定义“派生类Dog类”---------------------*/ class Dog : public Animal { public: //写法1隐式重写不推荐 void makeSound() { cout 汪汪汪 endl; } }; /*---------------------定义“派生类Cat类”---------------------*/ class Cat : public Animal { public: //写法2显式用override标记推荐 void makeSound() override { cout 喵喵喵~ endl; } }; /*---------------------测试函数通过基类指针调用虚函数---------------------*/ void playSound(Animal* animal) { animal-makeSound(); //多态调用 } int main() { //1.创建“基类 派生类”的对象 Animal generic; Dog dog; Cat cat; //2.调用playSound函数进行多态调用 playSound(generic); // 输出动物发出声音 playSound(dog); // 输出汪汪汪 playSound(cat); // 输出喵喵喵~ return 0; }在这里插入图片描述2. final关键字怎么使用final 关键字用于限制类的继承或虚函数的重写增强代码的安全性和可维护性。final关键字有两种用法修饰类禁止该类被继承即该类不能作为基类修饰虚函数禁止派生类重写该虚函数1. 修饰类禁止继承代码语言javascriptAI代码解释#include iostream using namespace std; class Base { // 基类成员 }; class Derived final : public Base //注意使用 final 修饰禁止被继承 { // 最终派生类成员 }; class IllegalDerived : public Derived //编译错误无法从 final 类 Derived 派生 { // ... }; int main() { //1.创建“最终派生类”的对象 Derived d; //正确可以正常创建 final 类的对象 cout 成功创建 Derived 对象final 类 endl; //2.创建“继承最终派生类”的对象 IllegalDerived i; //错误无法实例化从 final 类派生的类 return 0; }在这里插入图片描述2. 修饰虚函数禁止重写代码语言javascriptAI代码解释#include iostream using namespace std; class Base { public: //1.声明虚函数允许派生类重写 virtual void func() { cout Base::func() endl; } //2.声明虚函数并用 final 修饰禁止派生类重写 virtual void finalFunc() final { cout Base::finalFunc() endl; } }; class Derived : public Base { public: //1.正常重写非 final 的虚函数 void func() override { cout Derived::func() endl; } //2.编译错误void Derived::finalFunc() 重写 final 函数 void finalFunc() override { cout Derived::finalFunc() endl; } }; int main() { //1.测试虚函数重写 Base* ptr new Derived(); ptr-func(); // 调用 Derived::func()多态 //2.测试 final 函数 ptr-finalFunc(); // 错误Derived::finalFunc() 无法重写 Base::finalFunc() delete ptr; return 0; }在这里插入图片描述3. 析构函数是怎么进行重写的在 C 中当基类的析构函数被声明为虚函数时只要派生类定义了析构函数无论是否添加virtual关键字该派生类析构函数都会与基类析构函数构成重写。尽管基类析构函数如~Base()和派生类析构函数如~Derived()名字不同看似不符合重写 “函数名相同” 的规则。但实际上编译器会对析构函数名称做特殊处理将编译后的名称统一处理为destructor从而实现重写机制。通过下面的代码示例可以看到如果基类析构函数~A()没有加virtual修饰那么在执行delete p2时只会调用基类A的析构函数而不会调用派生类B的析构函数。若派生类B的析构函数~B()中包含资源释放的逻辑这种情况就会导致资源无法正常释放进而引发内存泄漏问题 。www.dongchedi.com/article/7597217223819772478www.dongchedi.com/article/7597215233471889944www.dongchedi.com/article/7597216873696526910www.dongchedi.com/article/7597217143041737241www.dongchedi.com/article/7597214870441935385www.dongchedi.com/article/7597214599947043353www.dongchedi.com/article/7597214580846477886www.dongchedi.com/article/7597216071082738201www.dongchedi.com/article/7597214433031078424www.dongchedi.com/article/7597214537498362392www.dongchedi.com/article/7597215399566361150www.dongchedi.com/article/7597215658752868888www.dongchedi.com/article/7597215102077141528www.dongchedi.com/article/7597214696924004889www.dongchedi.com/article/7597213042329895448www.dongchedi.com/article/7597215125493400126www.dongchedi.com/article/7597212587801018905www.dongchedi.com/article/7597214580846215742www.dongchedi.com/article/7597214267869692440www.dongchedi.com/article/7597213056480969278www.dongchedi.com/article/7597212812516639257www.dongchedi.com/article/7597212812516868633www.dongchedi.com/article/7597213320844182041www.dongchedi.com/article/7597211160895046206www.dongchedi.com/article/7597211076186374681www.dongchedi.com/article/7597212587801477657www.dongchedi.com/article/7597210839670080062www.dongchedi.com/article/7597210276412899864www.dongchedi.com/article/7597211030086926872www.dongchedi.com/article/7597211160895078974www.dongchedi.com/article/7597209997126238744www.dongchedi.com/article/7597209064238039577www.dongchedi.com/article/7597211030087287320www.dongchedi.com/article/7597209862904480318www.dongchedi.com/article/7597209319725253145www.dongchedi.com/article/7597208525277987353www.dongchedi.com/article/7597208525278151193www.dongchedi.com/article/7597210268858958398www.dongchedi.com/article/7597209475426435609www.dongchedi.com/article/7597209772429476377www.dongchedi.com/article/7597201951176213017www.dongchedi.com/article/7597201687174562366www.dongchedi.com/article/7597199724889997849www.dongchedi.com/article/7597199550092657177www.dongchedi.com/article/7597200248943329816www.dongchedi.com/article/7597199001863701017www.dongchedi.com/article/7597198298541834777www.dongchedi.com/article/7597200591446000190www.dongchedi.com/article/7597199968348357145www.dongchedi.com/article/7597199312984162841www.dongchedi.com/article/7597199429019861566www.dongchedi.com/article/7597196791863902782www.dongchedi.com/article/7597197725960110616www.dongchedi.com/article/7597197533550920217www.dongchedi.com/article/7597196766895079960www.dongchedi.com/article/7597197878439756313www.dongchedi.com/article/7597196909912031768www.dongchedi.com/article/7597195764053492248www.dongchedi.com/article/7597196370181030424www.dongchedi.com/article/7597195961618121241www.dongchedi.com/article/7597195004385182232www.dongchedi.com/article/7597196281857442366www.dongchedi.com/article/7597195368090075673www.dongchedi.com/article/7597195809683505689www.dongchedi.com/article/7597194439940932158www.dongchedi.com/article/7597194164794933822www.dongchedi.com/article/7597194060553749016www.dongchedi.com/article/7597195414877995544www.dongchedi.com/article/7597194911112479256www.dongchedi.com/article/7597194219174068761www.dongchedi.com/article/7597192718418756120www.dongchedi.com/article/7597191743318065689www.dongchedi.com/article/7597194069471003161www.dongchedi.com/article/7597193401016500760www.dongchedi.com/article/7597192147254772286www.dongchedi.com/article/7597192394672505406www.dongchedi.com/article/7597190301329080894www.dongchedi.com/article/7597188998091833881www.dongchedi.com/article/7597190006675243582www.dongchedi.com/article/7597189866363372056

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询