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

松江网站设计缙云县城乡建设局网站

松江网站设计,缙云县城乡建设局网站,wordpress 后台 获取分类id,找人做网站需要注意问题本讲内容: 认识什么是虚继承什么是虚函数多态的含义 综上:虚继承就是 //虚继承就是c为了解决多继承中的菱形继承问题而引入的一种特殊的继承方式 //虚继承就是让派生类只保留一份共同基类的成员,进而避免重复和二义性 虚继承的语法&#x…

本讲内容:

  1. 认识什么是虚继承
  2. 什么是虚函数
  3. 多态的含义

综上:虚继承就是

//虚继承就是c++为了解决多继承中的菱形继承问题而引入的一种特殊的继承方式

//虚继承就是让派生类只保留一份共同基类的成员,进而避免重复和二义性

虚继承的语法:

class A {...}

class B : virtual public A {...}

class C : virtual public A {...}

class D : public B, public C {...}

这样D对象中会有一份A的成员

虚继承就是为了解决多继承时“同一个祖先类会被继承多份”的问题。

比如:

  • 有一个A类,B和C都继承A,D又同时继承B和C。
  • 如果不用虚继承,D里面会有两份A的内容(重复了)。
  • 用了虚继承,D里面只会有一份A的内容(不重复)。

一句话总结: 虚继承就是让多继承时,最上面的公共基类只保留一份,避免重复和混乱。

#include<iostream>
using namespace std;class A{
public:int x;A() : x(100) {}
};class B : virtual public A {};
class C : virtual public A {};
class D : public B,public C {};int main()
{D d;d.x = 200;  //不会有二义性cout << d.x << endl;return 0;
}

这便就是一个典型的菱形继承问题。

下面就是一个虚继承的例子

//虚继承就是为了解决多继承时“同一个祖先类会继承多份”的问题
//下面就是一个典型的虚继承的实例
#include<iostream>
using namespace std;class Furniture{
public:Furniture(string wood);
protected:string _wood;
};Furniture :: Furniture(string wood)
{_wood = wood;
}class Sofa : virtual public Furniture{
public:Sofa(float length,string wood);
protected:float _length;
};Sofa::Sofa(float length,string wood) : Furniture(wood),_length(length) {}
//这一行的意思就是通过 Sofa类的构造函数来实现,重点在于初始化列表部分
//Furniture(wood)这里表示在构造Sofa对象的时候,先调用虚基类Furniture,并把wood参数传递给他
//_length(length)这里表示用length参数初始化Sofa类自己的成员class Bed : virtual public Furniture{
public:Bed(float width,string wood);
protected:float _width;
};Bed :: Bed(float width,string wood): Furniture(wood),_width(width) {}class Sofabed : public Sofa,public Bed{
public:Sofabed(float length,string wood,float width);void getSize();
};Sofabed::Sofabed(float length,string wood,float width) : Sofa(length,wood),Bed(width,wood),Furniture(wood) {}
void Sofabed :: getSize(){cout << "沙发床长" << _length << "m" << endl;cout << "沙发床宽" << _width << "m" << endl;cout << "沙发床材质为" << _wood << endl;
}int main()
{Sofabed sbed(1.8,"梨木",1.5);sbed.getSize();return 0;
}

现在我们再展开说一下多态

多态是什么意思呢?

这是面向对象编程中的三大特性之一,意思就是“同一种操作作用于不同的对象,可以有不同的表现。

简单的来说,就是用父类指针/引用指向子类对象,通过虚函数调用,实际执行的是之类的实现

那么多态的三要素是:

1.继承,必须有基类与派生类

2.虚函数,基类中有virtual声明的成员函数

3.父类指针/引用:用基类指针或引用指向派生类对象

#include <iostream>
using namespace std;class Animal {
public:virtual void speak() { // 虚函数cout << "动物叫" << endl;}
};class Dog : public Animal {
public:void speak() override { // 重写cout << "狗叫:汪汪" << endl;}
};void makeSound(Animal* a) {a->speak(); // 多态:实际调用的是对象的真实类型的方法
}int main() {Dog d;makeSound(&d); // 输出:狗叫:汪汪return 0;
}

虚函数

通过给函数加上virtual关键字,使成员函数成为虚函数,类中会增加了虚函数表指针的成员,虚函数表中会保存自己类的虚成员函数的地址,在通过指针或引用访问成员函数时,会先到虚函数表查找有无该成员函数,如果有就调用,没有的话就再去找其他的成员函数。

通过这种机制实现基类指针、引用调用实际指向的派生类的成员函数

多态的难点在于理解与运用

//虚函数
//虚函数式c++中实现多态的关键
#include<iostream>
using namespace std;class Person
{
public:virtual void work() {cout << "工作" << endl;}
};class Worker : public Person
{
public:void work() {cout << "工人生产" << endl;}
};class Farmer : public Person
{
public:void work() {cout << "修理" << endl;}
};class Teacher : public Person
{
public:void work() {cout << "教与学" << endl;}
};void dowork(Person& p)
{p.work();
}int main()
{//数组:把上面所有人放进去,循环调用他们的work()Person* p[3];p[0] = new Worker();p[1] = new Farmer();p[2] = new Teacher();for(int i = 0;i < 3;++i)dowork(*p[i]);for(int i = 0;i < 3;++i)delete p[i];return 0;
}


文章转载自:

http://lfeljZrP.bftqc.cn
http://8ZNPWmls.bftqc.cn
http://KBEggaDS.bftqc.cn
http://tCMgP5V8.bftqc.cn
http://LhvQcd3i.bftqc.cn
http://Arp4VX8O.bftqc.cn
http://8b5iNFfP.bftqc.cn
http://K4NCmYHx.bftqc.cn
http://W4HRiCn4.bftqc.cn
http://1Lkvmf3j.bftqc.cn
http://wo6kI81H.bftqc.cn
http://xIepjH31.bftqc.cn
http://Bv4isIS2.bftqc.cn
http://hF2Xosao.bftqc.cn
http://3zK1gBLp.bftqc.cn
http://mE37EBWS.bftqc.cn
http://YJazgEWf.bftqc.cn
http://2P76hGQ1.bftqc.cn
http://ucsdHXxi.bftqc.cn
http://OktTv5WR.bftqc.cn
http://HaS4lhEf.bftqc.cn
http://5dDn0wVz.bftqc.cn
http://GttEBCbq.bftqc.cn
http://MOsEBoeU.bftqc.cn
http://YkCTqSH3.bftqc.cn
http://MGWwb5mb.bftqc.cn
http://ti8GK5x4.bftqc.cn
http://V380Js1c.bftqc.cn
http://oG2WACtQ.bftqc.cn
http://A4MVS20B.bftqc.cn
http://www.dtcms.com/wzjs/733453.html

相关文章:

  • 一个公司做两个网站的多吗做门户网站的营业范围
  • 可以免费商用国外印花图案设计网站推荐好的设计网站
  • 怎么做网站的api网站建设大作业电子版
  • 酒吧dj做歌网站主页格式
  • 页面设计制作网站找工作网
  • 运用django做网站宣传制作清单及价格
  • 广东网站备案查询系统2016网站建设报价表
  • 长春做网站哪里好浙江虎霸建设机械有限公司网站
  • 陕西住房城乡建设厅网站保定seo网络推广
  • 河南怎样做网站推广福利吧 wordpress主题
  • 平台开发网站建设公司官网英文网站推广工作
  • 做兼职网站的主要参考文献wordpress关键字查询
  • wordpress让nginx卡死seo如何分析网站
  • 网站流量是什么意思网站开发备案认证
  • 凡科建站多少钱php网站成品
  • 小说写作网站怎么设置网站字体
  • 肥西建设局官方网站合肥网站建设渠道
  • 怎么用polylang做网站wordpress创建知识库
  • 网站开发后台数据库怎么搞网站如何做聚合页面
  • 百度收录技术零基础学seo要多久
  • 免费建站模板网站建设 上海浦东
  • 网站建设公司简介范文开发一个电商app需要多少钱
  • 网站建设开发计划书青岛做网站建网站
  • 如何让百度更新网站收录企业主页是什么
  • 乌海市住房城乡建设厅网站易思espcms企业网站管理系统
  • 网站到期续费要多少钱wordpress主题更新失败
  • 手机网站开发htmlwordpress二维码 插件
  • 建设鲜花网站前的市场分析网站 ca证书怎么做
  • 南宁市网站开发户网站建设的不全.
  • 程序员建网站怎么做网站评论