首页 > 其他分享 >类和对象(继承)

类和对象(继承)

时间:2023-08-28 20:01:54浏览次数:40  
标签:继承 子类 成员 public 对象 父类 class

继承是面向对象三大特性之一

继承的好处:减少重复代码

语法: class  子类 : 继承方式   父类

子类 也称 派生类

父类 也称 基类

比如:class A :public B

A类称为 子类(派生类)

B类称为 父类(基类)

public 叫做 继承方式


派生类中的成员,包含两大部分

一类是从基类继承过来的,一类是自己增加的成员。

从基类继承过来的表现其共性,而新增的成员表象其个性。

例子:

//公共页面类

class BasePage

{

public:

void header()

{

 cout << "首页、公开课、登录、注册......(公共头部)" << endl;

}

void footer()

{

 cout << "帮助中心、交流合作、站内地图......(公共底部)" << endl;


}

void left()

{

 cout << "Java、Python、C++......(公共分类列表)" << endl;

}

};


//Java页面

class Java :public BasePage

{

public:

void content()

  {

   cout << "Java学科视频" << endl;

  }

};

//Python页面

class Python :public BasePage

{

public:

void content()

  {

   cout << "Python学科视频" << endl;

  }

};


继承的三种方式:

1.公共继承    2.保护继承    3.私有继承


继承中的构造和析构顺序

先调用父类构造函数,然后调用子类构造函数, 析构顺序与构造顺序相反


继承同名成员处理方式

访问子类同名成员 直接访问即可。

访问父类同名成员 需要加作用域。

总结:

1.子类对象可以直接访问到子类中同名成员。

2.子类对象加作用域可以访问到父类同名成员。

3.当子类与父类拥有的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类同名成员函数。


继承同名静态成员处理方式

静态成员和非静态成员出现同名,处理方式一致,只不过有两种访问方式。

静态成员有两种访问方式:

1.通过对象进行访问

2.通过类名进行访问


多继承语法

语法:class 子类 :继承方式 父类1  ,  继承方式 父类2......

多继承可能会引发父类中有同名成员出现,需要加作用域区分。

c++实际研发中不建议多继承。

菱形继承

概念:两个派生类(子类)继承同一个基类(父类),又有某个类同时继承两个派生类(子类),这种继承被称为菱形继承(砖石继承)。

总结:

1.菱形继承带来的主要问题是子类继承两份相同的数据,导致资源浪费以及毫无意义。

2.利用虚继承可以解决菱形继承

例子:

//动物类

class Animal

{

public:

int m_age;

};

利用虚继承 解决菱形继承的问题

继承之前 加上关键字 virtual 变为虚继承

Animal类 称为虚基类

//羊类

class Sheep : virtual public Animal { };

//驼类

class Tuo : virtual public Animal { };

//羊驼

class SheepTuo : public Sheep, public Tuo { };

标签:继承,子类,成员,public,对象,父类,class
From: https://blog.51cto.com/u_15839001/7266591

相关文章

  • 论文解读 | OmniObject3D:用于逼真感知、重建和生成的大词汇量3D对象数据集
    原创|文BFT机器人这篇论文的主要目标是介绍和探索OmniObject3D数据集,该数据集包含大量真实扫描的3D物体,涵盖了190个类别,提供了多种丰富的注释,包括纹理3D网格、采样点云、多视图图像等。作者将OmniObject3D应用于多个3D视觉任务,包括交叉场景的新视角合成、神经表面重建和3D物体生......
  • 使用autofac注册继承特定接口的类或接口
    publicclassMyModule:Module{///<summary>//////</summary>///<paramname="builder"></param>protectedoverridevoidLoad(ContainerBuilderbuilder){//扫描程序集中所有继承自ITransientDepend......
  • C++对象内存模型
    根据前面讲过的知识,C++的对象内存模型主要包含了以下几个方面的内容:如果没有虚函数也没有虚继承,那么对象内存模型中只有成员变量。如果类包含了虚函数,那么会额外添加一个虚函数表,并在对象内存中插入一个指针,指向这个虚函数表。如果类包含了虚继承,那么会额外添加一个虚基类表,......
  • C++面向对象进阶
    C++中的拷贝是啥意思?是利用一个已经存在的对象创建一个新对象,用已经存在的数据初始化新对象的内存。对象创建有两个阶段:1.分配内存2.进行初始化   是不是new关键字的使用s1(s2),s1=s2,s1=1,类似这种都是以拷贝的方式完成的初始化,区别只是有没有进行隐式的类型转......
  • Qt开发思想探幽]QObject、模板继承和多继承
    @目录[Qt开发探幽]QObject、模板继承和多继承1.QObject为什么不允许模板继承:2.如果需要使用QObject进行多继承的话,子对象引用的父类链至多只能含有一个QObject3.如果使用模板类和QObject做多继承,编译不通过问题场景[Qt开发探幽]QObject、模板继承和多继承当我们在用Qt开发一个......
  • Java++:对List对象列表属性值的快速搜索
    思路:1、传入数据源List,并指定要搜索的字段;将这些字段的值拼接成一个字符串,并保存每个对象的值的起始和结束位置:2、搜索时,先使用正则表达式在保存的搜索字符串找到位置,再利用这些位置在索引数据数组中找到对应对象索引;importjava.lang.reflect.Field;importjava.util.ArrayLis......
  • JVM 内存大对象监控和优化实践
    作者:vivo互联网服务器团队-LiuZhen、YeWenhao服务器内存问题是影响应用程序性能和稳定性的重要因素之一,需要及时排查和优化。本文介绍了某核心服务内存问题排查与解决过程。首先在JVM与大对象优化上进行了有效的实践,其次在故障转移与大对象监控上提出了可靠的落地方案。最后,总......
  • Redis存取多维对象或数组
    最近阅读tp5的底层类的实现,看到了大神的Redis类的实现,觉得非常的简洁明了,而且统一了所有的get,set,在更新一下,非常值得参考/***读取缓存*@accesspublic*@paramstring$name缓存变量名*@parammixed$default默认值*@returnmixed......
  • 摄像机与空对象
    我们一般很少直接在摄像机上做动画,需要借助到摄像机新建321把123分开新建空对象,打开空对象的三维开关移动空对象的时候,摄像机也会发生变化,所以就在空对象上面打关键帧就能做到摄像机动画......
  • 3、IOC创建对象的方式
    3、IOC创建对象的方式使用无参构造方法来进行创建对象如果说我们需要使用有参构造的方法来构造对象,那么我们需要赋值下标赋值<!--用参数的下标进行赋值-->  <beanid="user"class="com.an.pojo.user">    <constructor-argindex="0"value="这是用下标进......