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

营销型网站建设-深圳信科企业培训平台

营销型网站建设-深圳信科,企业培训平台,北京疫情消息最新通报,网站如何做国外推广9.1 多继承 9.1.1 概念 一个类有多个直接基类的继承关系称为多继承(多个父类)多继承声明语法 class 派生类名 : 访问控制 基类名1 , 访问控制 基类名2 , … , 访问控制 基类名n {数据成员和成员函数声明 };类 C 可以根据访问控制同时…

9.1 多继承

9.1.1 概念

  • 一个类有多个直接基类的继承关系称为多继承(多个父类)
  • 多继承声明语法
class  派生类名 : 访问控制  基类名1 ,  访问控制  基类名2 ,, 访问控制  基类名n
{数据成员和成员函数声明
}
  • 类 C 可以根据访问控制同时继承类 A 和类 B 的成员,并添加自己的成员

在这里插入图片描述
在这里插入图片描述

9.1.2 多继承的派生类的构造和访问

  • 多个基类的派生类构造函数可以用初始式调用基类构造函数初始化数据成员
  • 执行顺序与单继承构造函数情况类似。多个直接基类构造函数执行顺序取决于定派生类时指定的各个继承基类的顺序
    在这里插入图片描述
  • 一个派生类对象拥有多个直接或间接基类的成员。不同名成员访问不会出现二义性。如果不同的基类有同名成员,派生类对象访问时应该加以识别
    在这里插入图片描述

示例代码:

#include <iostream>using namespace std;class Airplane 
{
protected:int high;
public:Airplane(){cout << "飞机的构造函数" << endl;high = 100;}void show(){cout << "飞行高度 " << high << endl;}
};class Ship
{
protected:int speed;
public:Ship(){cout << "轮船的构造函数" << endl;speed = 50;}void show(){cout << "航行的速度 " << speed << endl;}
};class WaterPlane : public Ship, public Airplane   //多继承
{
public:WaterPlane(){cout << "水上飞机的构造函数" << endl;}
};int main()
{WaterPlane w;   //先构造基类,再构造派生类,基类的构造顺序和继承顺序有关cout << sizeof(w) << endl;w.Airplane::show();w.Ship::show();return 0;
}

运行结果:
在这里插入图片描述

9.1.3 多继承的二义性

如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性。
在这里插入图片描述
示例代码:

#include <iostream>using namespace std;class TestA
{
public:int a[100];
};class TestB : public TestA
{
public:int b;
};class TestC : public TestA
{
public:int c;
};class TestD : public TestB, public TestC
{
public:int d;
};int main()
{TestD td;cout << sizeof(td) << endl;cout << &td << endl;cout << &td.TestB::a << endl;cout << &td.b << endl;cout << &td.TestC::a << endl;cout << &td.c << endl;cout << &td.d << endl;return 0;
}

运行结果:
在这里插入图片描述

9.1.4 虚继承

  • 如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性
  • 如果在多条继承路径上有一个公共的基类,那么在继承路径的某处汇合点,这个公共基类就会在派生类的对象中产生多个基类子对象
  • 要使这个公共基类在派生类中只产生一个子对象,必须对这个基类声明为虚继承,使这个基类成为虚基类。
  • 虚继承声明使用关键字 virtual
    在这里插入图片描述
    在这里插入图片描述
    示例代码:
#include <iostream>using namespace std;class TestA    //虚基类
{
public:int a;
};class TestB : virtual public TestA
{
public:int b;
};class TestC : virtual public TestA
{
public:int c;
};class TestD : public TestB, public TestC
{
public:int d;
};int main()
{TestD td;cout << sizeof(td) << endl;cout << "******" << endl;TestB tb;cout << sizeof(tb) << endl;cout << &tb << endl;cout << &tb.a << endl;cout << &tb.b << endl;cout << "*****" << endl;cout << &td << endl;cout << &td.a << endl;cout << &td.b << endl;cout << &td.c << endl;cout << &td.d << endl;return 0;
}

运行结果:
在这里插入图片描述

9.2 C++向上转型

9.2.1 将派生类对象赋值给基类对象

  • 赋值的本质是将现有的数据写入已分配好的内存中,对象的内存只包含了成员变量,所以对象之间的赋值是成员变量的赋值,成员函数不存在赋值问题

    运行结果也有力地证明了这一点,虽然有a=b;这样的赋值过程,但是 a.display() 始终调用的都是 A 类的 display() 函数。换句话说,对象之间的赋值不会影响成员函数,也不会影响 this 指针。

  • 将派生类对象赋值给基类对象时,会舍弃派生类新增的成员,也就是“大材小用”,如下图所示:
    在这里插入图片描述
    可以发现,即使将派生类对象赋值给基类对象,基类对象也不会包含派生类的成员。

  • 这种转换关系是不可逆的,只能用派生类对象给基类对象赋值,而不能用基类对象给派生类对象赋值。理由很简单,基类不包含派生类的成员变量,无法对派生类的成员变量赋值。同理,同一基类的不同派生类对象之间也不能赋值。

在这里插入图片描述
示例代码:

#include <iostream>using namespace std;class Parent
{
private:int a;
};class Child : public Parent
{
private:int b;
};int main()
{int a = 1.11;double b = 2;Parent p;   Child c;p = c;    //只能将派生类对象赋值给基类对象   派生类引用赋值给基类引用   派生类指针赋值给基类指针 (向上转型)//c = p;return 0;
}

9.2.2 将派生类指针赋值给基类

9.3 类型兼容性原则

  • 类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。
  • 类型兼容规则中所指的替代包括以下情况:
    (1)子类对象可以当作父类对象使用
    (2)子类对象可以直接赋值给父类对象
    (3)子类对象可以直接初始化父类对象
    (4)父类指针可以直接指向子类对象
    (5)父类引用可以直接引用子类对象
  • 在替代之后,派生类对象就可以作为基类的对象使用,但是只能使用从基类继承的成员。类型兼容规则是多态性的重要基础之一。
http://www.15wanjia.com/news/51182.html

相关文章:

  • 上海大型网站制作公司seo关键字优化
  • 安全联盟这种网站建设短视频seo询盘系统
  • 西安专业做网站建设企业网站建设的流程
  • 桂林网站优化选择桂林速优网络公司百度客服人工电话多少
  • sns网站需求杭州网站运营十年乐云seo
  • 短网址生成接口谷歌优化的网络公司
  • 自己做的网站如何在百度搜到seo是搜索引擎优化吗
  • 广东泰通建设有限公司网站智慧软文网
  • 上海网站建设找摩彼seo综合查询系统
  • 济宁做网站哪家好惠州seo代理计费
  • 网站制作一年多少钱百度seo排名优化联系方式
  • 哪家做外贸网站好谷歌关键词
  • 网站服务器名是什么制作网页的软件
  • 免费注册微信东莞百度快速排名优化
  • 免费网站建设基础步骤济南百度竞价代运营
  • 广州学生做网站电脑培训班一般多少钱
  • 广州制作网站公司电话网络搜索词排名
  • 杭州第三方推广公司网站用户体验优化
  • 湖州住房和城乡建设厅网站备案查询站长之家
  • 网站源码绑定域名处理谷歌seo优化中文章
  • 给网站做cdn软文推广的标准类型
  • 如何利用影视网站做cpa网络推广seo公司
  • 新公司怎么做网站百度一下首页网址百度
  • 课题组网站怎么做网络策划是做什么的
  • 做网站便宜还是app便宜搜索引擎推广方式
  • 火是用什么做的视频网站中国培训网
  • 不想使用wordpressseo就是搜索引擎广告
  • 广州10打网站服务商全网营销代运营
  • 深圳哪里有做网站推广的六年级下册数学优化设计答案
  • 怎么运用区块链做网站推广方案如何写