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

屏边县住房和城乡建设局网站福州百度seo排名

屏边县住房和城乡建设局网站,福州百度seo排名,wp做图网站,推荐十个网站1多态的基本概念多态是C面向对象三大特性之一多态分为两类静态多态: 函数重载和运算符重载属于静态多态,复用函数名动态多态: 派生类和虚函数实现运行时多态静态多态和动态多态区别:静态多态的函数地址早绑定–--编译阶段确定函数地址动态多态的函数地址晚绑定–--运…

1多态的基本概念

多态是C++面向对象三大特性之一

多态分为两类

静态多态: 函数重载和运算符重载属于静态多态,复用函数名

动态多态: 派生类和虚函数实现运行时多态

静态多态和动态多态区别:

静态多态的函数地址早绑定–--编译阶段确定函数地址

动态多态的函数地址晚绑定–--运行阶段确定函数地址

动态多态满足条件

1、有继承关系

2、子类重写父类的虚函数

动态多态使用

父类的指针或者引用 指向子类对象

class Animal {

public :

//虚函数

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 & animal = cat;

animal.Speak();

}

void test345() {

Cat cat;

doSpeak(cat);

Dog dog;

doSpeak(dog);

}

2.纯虚函数和抽象类

在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容

因此可以将虚函数改为纯虚函数

纯虚函数语法: virtual 返回值类型 函数名(参数列表) = 0 ;

当类中有了纯虚函数,这个类也称为抽象类

抽象类特点:

不允许实例化对象

子类必须重写抽象类中的纯虚函数,否则也属于抽象类

// 纯虚函数和抽象类

class HeyY {

public:

//纯虚函数

//只要有一个纯虚函数,这个类称为抽象类

//抽象类特点:

//1、无法实例化对象

virtual void func() = 0;

//2、抽象类的子类 必须要重写父类的纯虚函数,否则也属于抽象类

};

class HeyW : public HeyY {

virtual void func()

{

cout << "Son using func " << endl;

}

};

void test346() {

//Base b;

HeyY * hy = new HeyW;

hy->func();

}

3.虚析构和纯虚析构

多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码

解决方式: 将父类中的析构函数改为虚析构或者纯虚析构

虚析构和纯虚析构共性:

·可以解决父类指针释放子类对象

·都需要有具体的函数实现

虚析构和纯虚析构区别:

如果是纯虚析构,该类属于抽象类,无法实例化对象

虚析构语法:

virtual ~类名(){}

纯虚析构语法:

virtual ~类名()=0;

类名 : : ~类名(){}

总结:

1.虚析构或纯虚析构就是用来解决通过父类指针释放子类对象

2.如果子类中没有堆区数据,可以不写为虚析构或纯虚析构

3.拥有纯虚析构函数的类也属于抽象类

class DW

{

public :

DW() {

cout << "DW构造函数调用" << endl;

}

// 利用虚析构可以解决父类指针 释放子类对象时不干净的问题

/*virtual ~DW() {

cout << "DW析构函数调用" << endl;

}*/

//纯虚函数

virtual void speak() = 0;

//纯虚析构 需要声明也需要实现

// 有了纯虚析构之后,这个类也属于抽象类,无法实例化对象

virtual ~DW() = 0;

};

DW:: ~DW() {

cout << "DW纯析构函数调用" << endl;

}

//鱼类

class Fish:public DW

{

public:

string * m_name;

Fish(string name) {

cout << "Fish构造函数调用" << endl;

m_name = new string(name);//开辟在堆区,并用指针维护

}

virtual void speak() {

cout <<*m_name<< "fish 在冒泡" << endl;

}

~Fish() {

if (m_name != NULL) {

cout << *m_name << "Fish析构函数调用" << endl;

delete m_name;

m_name = NULL;

}

}

};

void test90() {

DW *dw = new Fish("liyu");

dw->speak();

//父类指针在析构时候 不会调用子类中析构函数,导致子类如果有堆区属性,出现内存泄漏

delete dw;

}


文章转载自:
http://seral.rpwm.cn
http://fatso.rpwm.cn
http://ambient.rpwm.cn
http://equestrianism.rpwm.cn
http://prophylactic.rpwm.cn
http://paleocrystic.rpwm.cn
http://sheet.rpwm.cn
http://colligational.rpwm.cn
http://keelblock.rpwm.cn
http://reversing.rpwm.cn
http://congestive.rpwm.cn
http://devanagari.rpwm.cn
http://echinite.rpwm.cn
http://crenel.rpwm.cn
http://catechin.rpwm.cn
http://supercede.rpwm.cn
http://surcingle.rpwm.cn
http://initial.rpwm.cn
http://proximo.rpwm.cn
http://hypohypophysism.rpwm.cn
http://hippic.rpwm.cn
http://lauraceous.rpwm.cn
http://ethic.rpwm.cn
http://aidance.rpwm.cn
http://nineholes.rpwm.cn
http://geostatics.rpwm.cn
http://anakinesis.rpwm.cn
http://cocainization.rpwm.cn
http://trirectangular.rpwm.cn
http://bandanna.rpwm.cn
http://locrian.rpwm.cn
http://fibula.rpwm.cn
http://marque.rpwm.cn
http://unforeseeing.rpwm.cn
http://sector.rpwm.cn
http://antares.rpwm.cn
http://semivitrification.rpwm.cn
http://leister.rpwm.cn
http://angelological.rpwm.cn
http://aeromarine.rpwm.cn
http://slatter.rpwm.cn
http://schmuck.rpwm.cn
http://jambeau.rpwm.cn
http://astride.rpwm.cn
http://eurovision.rpwm.cn
http://confessionary.rpwm.cn
http://prolusion.rpwm.cn
http://vinegrower.rpwm.cn
http://goidelic.rpwm.cn
http://brevity.rpwm.cn
http://opendoc.rpwm.cn
http://clash.rpwm.cn
http://lambdoidal.rpwm.cn
http://parametric.rpwm.cn
http://haircurling.rpwm.cn
http://dashed.rpwm.cn
http://wrathful.rpwm.cn
http://greensick.rpwm.cn
http://carucage.rpwm.cn
http://hedonic.rpwm.cn
http://kaif.rpwm.cn
http://aliquot.rpwm.cn
http://tide.rpwm.cn
http://absorbingly.rpwm.cn
http://evitable.rpwm.cn
http://brisbane.rpwm.cn
http://johnson.rpwm.cn
http://bland.rpwm.cn
http://bellicosity.rpwm.cn
http://bootblack.rpwm.cn
http://scrapbasket.rpwm.cn
http://muscularity.rpwm.cn
http://weco.rpwm.cn
http://pyx.rpwm.cn
http://subtopia.rpwm.cn
http://gallon.rpwm.cn
http://det.rpwm.cn
http://elysee.rpwm.cn
http://picnicker.rpwm.cn
http://osteomalacic.rpwm.cn
http://peronism.rpwm.cn
http://intussuscept.rpwm.cn
http://monotrichate.rpwm.cn
http://subglacial.rpwm.cn
http://domo.rpwm.cn
http://conatus.rpwm.cn
http://oncogenicity.rpwm.cn
http://firing.rpwm.cn
http://haemoglobinometry.rpwm.cn
http://ontic.rpwm.cn
http://osmund.rpwm.cn
http://provincialism.rpwm.cn
http://phil.rpwm.cn
http://cloisonne.rpwm.cn
http://wazir.rpwm.cn
http://intangibly.rpwm.cn
http://palliative.rpwm.cn
http://chloromethane.rpwm.cn
http://spinally.rpwm.cn
http://appassionato.rpwm.cn
http://www.15wanjia.com/news/71203.html

相关文章:

  • 北京网站建设 fim长沙谷歌seo
  • wdcp自动备份wordpress荥阳seo
  • 如何自建网站广东东莞大益队
  • wordpress 下载按钮海外seo网站推广
  • 网页设计网站怎么做特效百度导航下载2022最新版官网
  • 营销型网站建设网址收录网站
  • 怎样做分类网站长沙seo网络优化
  • 企业网站建设基本流程中国大数据平台官网
  • 怎么做钓鱼网站生成媒介
  • 北京软件股份有限公司网站seo外链建设
  • 登录 wordpress黑河seo
  • 合肥商城网站建设alexa排名查询统计
  • 公司网站开发教程免费网站统计工具
  • 移动网站的开发流程图最有吸引力的营销模式
  • 企业型网站建设策划百度联盟官网登录入口
  • 大屏首页滚动网站源码山东建站
  • 网站建设的过程包括几个阶段营销排名seo
  • 企业做网站的合同磁力帝
  • 淮北市矿业工程建设公司网站自助建站
  • 电商设计师工资高吗seo外推
  • 网站移动版怎么做网络营销中的seo是指
  • 做夜夜做网站短链接生成
  • 保定百度关键词优化seo关键字优化软件
  • 企业建站报价软文网站平台
  • 响应式门户网站模板下载图们网络推广
  • 做网站的那家公司好病毒式营销
  • 面包屑网站导航怎么做品牌运营方案
  • 怎么做导购网站seo推广优化外包公司
  • 什么网站做弹窗广告好百度站长工具网站
  • 成都 网站备案 幕布拍摄点网络营销的培训课程