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

张家港网站建设制作wordpress 数据备份插件

张家港网站建设制作,wordpress 数据备份插件,做网站推广的难点,公司网站上传文章前言#xff1a;多态是C面向对象三大特性之一。多态#xff0c;指的是一个类实例的相同方法在不同情形有不同表现形式。具有不同内部结构的对象可以共享外部接口。C多态就是用一个更通用的基类指针指向不同的子类实例#xff0c;为了能调用正确的方法#xff0c;我们需要用… 前言多态是C面向对象三大特性之一。多态指的是一个类实例的相同方法在不同情形有不同表现形式。具有不同内部结构的对象可以共享外部接口。C多态就是用一个更通用的基类指针指向不同的子类实例为了能调用正确的方法我们需要用到虚函数和虚继承。#include using namespace std;class Animal{public: // Speak函数就是虚函数 // 函数前面加上 virtual 关键字变成虚函数那么编译器在编译的时候就不能确定函数的调用了 virtual void speak(){ cout 动物在说话 endl; }};class Cat : public Animal{public: void speak(){ cout 小猫在说话 endl; }};class Dog : public Animal{public: void speak(){ cout 小狗在说话 endl; }};// 希望传入什么对象那么就调用什么对象的函数// 如果函数地址在编译阶段就能确定那么静态联编// 如果函数地址在运行阶段才能确定就是动态联编void DoSpeak(Animal animal){ animal.speak(); }// 多态满足条件// 1、有继承关系// 2、子类重写父类中的虚函数// 多态使用// 父类指针或引用指向子类对象void test(){ Cat cat; DoSpeak(cat); Dog dog; DoSpeak(dog);}int main(){ test(); return 0;}多态案例——计算器类案例描述分别利用普通写法和多态技术设计实现两个操作数进行运算的计算器类。#include#includeusing namespace std;class Calculator{public: int getResult(string oper){ if(oper ){ return m_Num1 m_Num2; } else if(oper -){ return m_Num1 - m_Num2; } else if (oper *){ return m_Num1 * m_Num2; } // 如果要提供新的运算需要修改源码 } int m_Num1; int m_Num2;};void test(){ // 普通实现测试 Calculator c; c.m_Num1 10; c.m_Num2 20; cout c.m_Num1 c.m_Num2 c.m_Num1 c.m_Num2 endl; cout c.m_Num1 - c.m_Num2 c.m_Num1 - c.m_Num2 endl; cout c.m_Num1 * c.m_Num2 c.m_Num1 * c.m_Num2 endl;}// 多态实现// 抽象计算器类// 多态优点代码组织结构清晰可读性强利于前期和后期的扩展以及维护class AbstractCalculator{public: virtual int getResult(){ return 0;} int m_Num1; int m_Num2;};// 加法计算器class AddCalculator : public AbstractCalculator{public: int getResult(){ return m_Num1 m_Num2; }};// 减法计算器class SubCalculator : public AbstractCalculator{public: int getResult(){ return m_Num1 - m_Num2; }};// 乘法计算器class MulCalculator : public AbstractCalculator{public: int getResult(){ return m_Num1 * m_Num2; }};void test2(){ // 创建加法计算器 AbstractCalculator *abc new AddCalculator; abc-m_Num1 10; abc-m_Num2 20; cout abc-m_Num1 abc-m_Num2 abc-getResult() endl; delete abc; // 用完了销毁 // 创建减法计算器 abc new SubCalculator; abc-m_Num1 10; abc-m_Num2 20; cout abc-m_Num1 - abc-m_Num2 abc-getResult() endl; delete abc; // 创建乘法计算器 abc new MulCalculator; abc-m_Num1 10; abc-m_Num2 20; cout abc-m_Num1 * abc-m_Num2 abc-getResult() endl; delete abc;}int main(){ test(); test2(); return 0;}总结C开发提倡利用多态设计程序架构因为多态优点很多。纯虚函数和抽象类在多态中通常父类中虚函数的实现没有意义主要都是调用子类重写的内容。因此可以将虚函数改为纯虚函数。#includeusing namespace std;class Base{public: // 纯虚函数 // 类中只要有一个纯虚函数就称为抽象类 // 抽象类无法实例化对象 // 子类必须重写父类中的纯虚函数否则也属于抽象类 virtual void func() 0;};class Son : public Base{public: virtual void func(){ cout func调用 endl; }};void test(){ Base * base NULL;// base new Base; // 抽象类无法实例化对象 base new Son; base-func(); delete base;}int main(){ test(); return 0;}多态案例二—制作饮品案例描述制作饮品的大致流程为煮水 - 冲泡 - 倒入杯中 - 加入辅料利用多态技术实现本案例提供抽象制作饮品基类提供子类制作茶水和咖啡。#includeusing namespace std;class AbstractDringking{public: // 烧水 virtual void Boil() 0; // 冲泡 virtual void Brew() 0; // 倒入杯中 virtual void PourInCup() 0; // 加入辅料 virtual void PutSomething() 0; // 规定流程 void MakeDrink(){ Boil(); Brew(); PourInCup(); PutSomething(); }};// 制作茶水class Tea : public AbstractDringking{public: void Boil(){ cout 煮农夫山泉 endl; } void Brew(){ cout 冲泡茶叶 endl; } void PourInCup(){ cout 将茶水倒入杯中 endl; } void PutSomething(){ cout 加入枸杞 endl; }};// 制作咖啡class Coffee : public AbstractDringking{public: void Boil(){ cout 煮纯净水 endl; } void Brew(){ cout 冲泡咖啡 endl; } void PourInCup(){ cout 将咖啡倒入杯中 endl; } void PutSomething(){ cout 加入牛奶 endl; }};// 业务函数void Dowork(AbstractDringking* drink){ drink-MakeDrink(); delete drink;}void test(){ Dowork(new Tea); cout ---------------------- endl; Dowork(new Coffee);}int main(){ test(); return 0;}虚析构和纯虚析构多态使用时如果子类中有属性开辟到堆区那么父类指针在释放时无法调用到子类的析构代码。解决方式将父类中的析构函数改为虚析构或者纯虚析构。#includeusing namespace std;class Animal{public: Animal(){ cout Animal构造函数 endl; } virtual void Speak() 0; // 析构函数加上virtual关键字变成虚析构函数// virtual ~Animal(){// cout Animal虚析构函数 endl;// } virtual ~Animal() 0;};Animal::~Animal() { cout Animal 纯虚析构函数 endl; }// 和包含普通纯虚函数的类一样包含类普通纯虚析构函数的类也是一个抽象类。不能够被实例化。class Cat : public Animal{public: Cat(string name){ cout Cat构造函数 endl; m_Name new string(name); } virtual void Speak(){ cout *m_Name 小猫在说话 endl; } ~Cat(){ cout Cat析构函数 endl; if(this-m_Name ! NULL) delete m_Name; m_Name NULL; } string *m_Name;};void test(){ Animal *animal new Cat(Tom); animal-Speak(); // 通过父类指针去释放会导致子类对象可能清理不干净造成内存泄露 // 怎么解决给基类增加一个虚析构函数 // 虚析构函数就是用来解决父类指针释放子类对象 delete animal;}int main(){ test(); return 0;}总结1、虚析构或纯虚析构就是用来解决通过父类指针释放子类对象2、如果子类中没有堆区数据可以不写为虚析构或纯虚析构3、拥有纯虚析构函数的类也属于抽象类多态案例三 - 电脑组装案例描述电脑主要组成部件为CPU(用于计算)显卡(用于显示)内存条(用于存储)将每个零件封装出抽象基类并且提供不同的厂商生产不同的零件例如Intel厂商和Lenovo厂商。创建电脑类提供让电脑工作的函数并且调用每个零件工作的接口。#includeusing namespace std;// 抽象CPU类class CPU{public: // 抽象的计算函数 virtual void calculate() 0;};// 抽象显卡类class VideoCard{public: virtual void display() 0;};// 抽象内存条类class Memory{public: virtual void storage() 0;};class Computer{public: Computer(CPU * cpu, VideoCard * vc, Memory * men){ m_cpu cpu; m_vc vc; m_men men; } // 提供工作的函数 void work(){ // 让零件工作起来调用接口 m_cpu-calculate(); m_vc-display(); m_men-storage(); } // 提供析构函数释放三个电脑零件 ~Computer(){ if(m_cpu ! NULL){ delete m_cpu; m_cpu NULL; } if(m_vc ! NULL){ delete m_vc; m_vc NULL; } if(m_men ! NULL){ delete m_men; m_men NULL; } }private: CPU * m_cpu; VideoCard * m_vc; Memory * m_men;};// 具体厂商// Intel厂商class IntelCPU : public CPU{public: virtual void calculate(){ cout Intel的CPU开始计算 endl; }};class IntelVideoCard : public VideoCard{public: virtual void display(){ cout Intel的显卡开始显示了 endl; }};class IntelMemory : public Memory{public: virtual void storage() { cout Intel的内存条开始存储了 endl; }};// Lenovo厂商class LenovoCPU : public CPU{public: virtual void calculate(){ cout Lenovo的CPU开始计算 endl; }};class LenovoVideoCard : public VideoCard{public: virtual void display(){ cout Lenovo的显卡开始显示了 endl; }};class LenovoMemory : public Memory{public: virtual void storage(){ cout Lenovo的内存条开始存储了 endl; }};void test(){ // 第一条电脑零件 CPU * intelCpu new IntelCPU; VideoCard * intelCard new IntelVideoCard; Memory * intelMem new IntelMemory; cout Intel零件组装电脑开始工作 endl; // 创建第一台电脑 Computer * computer1 new Computer(intelCpu, intelCard, intelMem); computer1-work(); delete computer1; cout ------------------------ endl; cout Lenovo零件组装电脑开始工作 endl; // 组装第二台电脑 Computer * computer2 new Computer(new LenovoCPU, new LenovoVideoCard, new LenovoMemory); computer2-work(); delete computer2; cout ------------------------ endl; cout 混装零件电脑开始工作 endl; Computer * computer3 new Computer(new LenovoCPU, new IntelVideoCard, new LenovoMemory); computer3-work(); delete computer3;}int main(){ test(); return 0;}                        - END -
http://www.zqtcl.cn/news/956839/

相关文章:

  • wordpress手机版如何设置福鼎整站优化
  • 网站建设小程序定制开发北京东宏建设网站
  • 网站制作还花钱网站图怎么做
  • 免费搭网站wordpress minty
  • 海沧建设网站多少国外调色网站
  • 中企动力建站怎么样网站建设与设计的心得体会
  • 打开网站出现directoryj2ee做网站
  • 如何建设一个视频网站西安个人做网站
  • wordpress站群教程市场营销培训课程
  • 17网站一起做网店白沟简单网页制作图片
  • 网站建设项目需求分析流程做商业地产的网站
  • 百度建站商业网点的定义
  • 古镇建设网站经济研究院网站建设方案
  • 会员网站开发百度自己的宣传广告
  • 重庆网络推广网站推广自己设计图纸的软件
  • 国内免费的短视频素材网站什么网站做博客好
  • 个体户网站建设wordpress修改作者链接
  • 做企业网站怎么样如何做网站的登录注册
  • 网站建设中标怎么做网站文字图片
  • 济南网站推广徽hyhyk1公司展示网站模板
  • ae免费模板下载网站视频网站数据库设计
  • 找做金融的网站网站建设方面存在的问题
  • 门户网站建设与开发wordpress添加文章总数标签总数
  • 想创办一个本地的人才招聘网站_如何做市场调查问卷windows7优化大师下载
  • 做网站建设要什么证视频付费网站建设
  • html网站建设实例代码软件下载app排行榜
  • 高端个人网站网站建设密码
  • 全网seo秦皇岛市做网站优化
  • 简述站点推广有哪些方式大兴做网站公司
  • 网站关键词密度查询太仓网站设计早晨设计