派生类

[C++]类的继承与派生

纵然是瞬间 提交于 2019-12-18 06:21:37
继承性是面向对象程序设计的第二大特性,它允许在既有类的基础上创建新类,新类可以继承既有类的数据成员和成员函数,可以添加自己特有的数据成员和成员函数,还可以对既有类中的成员函数重新定义。利用类的继承和派生实现了更高层次的代码可重用性,符合现代软件开发的思想。 C++语言同时支持单一继承和多重继承。单一继承是指派生类只从一个基类继承而来;相应的,多重继承指派生类同时从两个或更多的基类继承而来。java只支持单一继承。 一. 派生类 派生类的定义格式如下: class <派生类名>:[继承方式]<基类名1> [,[继承方式]<基类名2>,...,[继承方式]<基类名n>] { <派生类新增的数据成员和成员函数定义> }; 说明: (1)定义派生类关键字可以是class或者是struct,两者区别是:用class定义派生类,默认的继承方式是private,用struct定义派生类,默认的继承方式为public。新增加的成员默认属性也是class对应private属性,struct对应public属性。 (2)基类不能被派生类继承的两类函数是构造函数和析构函数。 二. 3种继承方式下基类成员在派生类中的访问属性 用下面的代码简单理解一下: #include "stdafx.h" #include<iostream> using namespace std; class Base {

C++ 继承和派生介绍

有些话、适合烂在心里 提交于 2019-12-17 14:41:40
继承(inheritance)是软件重用的一种方式,程序员通过继承可以吸收已有类的数据和行为来创建新类,并可以添加新的数据和行为来增强类的功能。创建新类时,并不需要创建全新的数据和成员函数,我们可以指明这个新类应当继承现有类的成员。此时,现有的类称为“基类”,继承实现的新类称为“派生类”。派生类代表了一组更加特殊化的对象,它包含了从基类继承来的行为,并进行了扩充。 介绍: 类是对现实中事物的抽象,类的继承和派生的层次结构则是对自然界中事物分类、分析的过程在程序设计中的体现。下图说明了某个公司雇员的派生关系。 位于最高层的雇员其抽象程度最高,是最具一般性的概念。 最下层抽象程度最低,最具体。 从上层到下层是具体化的过程,从下层到上层是抽象话的过程。 面向对象设计中上层与下层是基类与派生类的关系。 依照面向对象的理念:当某个概念用语言的基本类型不能具体表示时,就应当定义一个新的类型(class)。一个概念一般不是独立存在的,通常与其相关的概念共存,以此发挥更大的作用。当某个概念与其他概念之间存在关系时,应当在相应的类型之间也表示出这样的关系。 类之间的关系主要有以下两种: (1)“has a”:A car has wheels, engines, … (2)“is a”:A Manager is an Employee. ‘“has a”的表示方式-聚集(Integration)

封装,继承,多态

冷暖自知 提交于 2019-12-16 22:03:51
一、封装:   封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被称为抽象数据类型。 封装的意义:   封装的意义在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。   封装提供了一个有效的途径来保护数据不被意外的破坏。相比我们将数据(用域来实现)在程序中定义为公用的(public)我们将它们(fields)定义为私有的(privat)在很多方面会更好。私有的数据可以用两种方式来间接的控制。第一种方法,我们使用传统的存、取方法。第二种方法我们用属性(property)。   使用属性不仅可以控制存取数据的合法性,同时也提供了“读写”、“只读”、“只写”灵活的操作方法。 访问修饰符: Private:只有类本身能存取. Protected:类和派生类可以存取. Internal:只有同一个项目中的类可以存取. Protected Internal:是Protected和Internal的结合. Public:完全存取. 二、继承:   继承主要实现重用代码,节省开发时间。 1、C#中的继承符合下列规则: 继承是可传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员

封装、继承、多态

时间秒杀一切 提交于 2019-12-16 21:22:05
一、封装:   封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被称为抽象数据类型。 封装的意义:   封装的意义在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。   封装提供了一个有效的途径来保护数据不被意外的破坏。相比我们将数据(用域来实现)在程序中定义为公用的(public)我们将它们(fields)定义为私有的(privat)在很多方面会更好。私有的数据可以用两种方式来间接的控制。第一种方法,我们使用传统的存、取方法。第二种方法我们用属性(property)。   使用属性不仅可以控制存取数据的合法性,同时也提供了“读写”、“只读”、“只写”灵活的操作方法。 访问修饰符: Private:只有类本身能存取. Protected:类和派生类可以存取. Internal:只有同一个项目中的类可以存取. Protected Internal:是Protected和Internal的结合. Public:完全存取. 二、继承:   继承主要实现重用代码,节省开发时间。 1、C#中的继承符合下列规则: 继承是可传递的。如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员

C++ 详解dynamic_cast

瘦欲@ 提交于 2019-12-15 00:17:38
dynamic_cast运算符的主要用途:将基类的指针或引用安全地转换成派生类的指针或引用,并用派生类的指针或引用调用非虚函数。如果是基类指针或引用调用的是虚函数无需转换就能在运行时调用派生类的虚函数。 前提条件:当我们将dynamic_cast用于某种类型的指针或引用时,只有该类型含有虚函数时,才能进行这种转换。否则,编译器会报错。 dynamic_cast运算符的调用形式如下所示: dynamic_cast<type*>(e) //e是指针 dynamic_cast<type&>(e) //e是左值 dynamic_cast<type&&>(e)//e是右值 e能成功转换为type*类型的情况有三种: 1)e的类型是目标type的公有派生类:派生类向基类转换一定会成功。 2)e的类型是目标type的基类,当e是指针指向派生类对象,或者基类引用引用派生类对象时,类型转换才会成功,当e指向基类对象,试图转换为派生类对象时,转换失败。 3)e的类型就是type的类型时,一定会转换成功。 定义如下基类和派生类: #include<string> #include<iostream> usingnamespacestd; classBase{ public: Base():str(nullptr) {} Base(strings):str(s) {} virtualvoidprint()

06_继承与派生

梦想与她 提交于 2019-12-14 11:40:17
一:继承的概念   面向对象程序设计有 4 个主要特点:抽象、封装、继承和多态性。我们已经讲解了类和对象,了解了面向对象程序设计的两个重要特征一数据抽象与封装,已经能够设计出基于对象的程序,这是面向对象程序设计的基础。   要较好地进行面向对象程序设计,还必须了解面向对象程序设计另外两个重要特征——继承性和多态性。继承性是面向对象程序设计最重要的特征,可以说,如果没有掌握继承性,就等于没有掌握类和对象的精华,就是没有掌握面向对象程序设计的真谛。 (1) 类之间的关系 has-A, uses-A 和 is-A has-A 包含关系,用以描述一个类由多个“部件类”构成。实现 has-A 关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。 uses-A 一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友员或对象参数传递实现。 is-A 机制称为“继承”。关系具有传递性,不具有对称性。 (2) 继承关系举例 万事万物中皆有继承,是重要的现象 两个案例: 1 )植物继承图; 2 )程序员继承图 (3)继承相关概念 (4)派生类的定义 (5)继承的重要说明 1、子类拥有父类的所有成员变量和成员函数 2、子类可以拥有父类没有的方法和属性 3、子类就是一种特殊的父类 4、子类对象可以当作父类对象使用 二: 派生类的访问控制   派生类继承了基类的全部成员变量和成员方法

[C++系列] 68.多态基础及虚函数、抽象类详解

别说谁变了你拦得住时间么 提交于 2019-12-13 08:59:16
文章目录 1. 多态的概念 1.1 概念 2. 多态的定义及实现 2.1 多态定义的构成条件 2.2 重载、覆盖(重写)、隐藏(重定义)的对比 3. C++11 override 和 final 4. 抽象类 4.2 接口继承和实现继承 1. 多态的概念 1.1 概念 多态的概念:通俗来说,就是多种形态, 具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 举个栗子:比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优 先买票。 再举个栗子: 最近为了 争夺在线支付市场 ,支付宝年底经常会做诱人的扫 红包-支付-给奖励金 的活动。那么大家想想为什么有人扫的红包又大又新鲜8块、10块…,而有人扫的红包都是1毛,5毛…。其实这背后也是一个多态行为。支付宝首先会分析你的账户数据,比如你是新用户、比如你没有经常支付宝支付等等,那么你需要被鼓励使用支付宝,那么就你扫码金额 = random()%99;比如你经常使用支付宝支付或者支付宝账户中常年没钱,那么就不需要太鼓励你去使用支付宝,那么就你扫码金额 = random()%1;总结一下: 同样是扫码动作,不同的用户扫得到的不一样的红包,这也是一种多态行为 。ps:支付宝红包问题纯属瞎编,大家仅供娱乐。 2. 多态的定义及实现 2.1 多态定义的构成条件 多态是在不同继承关系的类对象,去调用同一函数

099

99封情书 提交于 2019-12-13 06:53:52
/* c++问题 C++反汇编 1 为什么两个参数: CList<DATA, DATA> m_list; 2 如何编写可移植性较高的代码? 3 编写较好调试信息:错误报告? 4 保护属性和私有属性对派生类的影响 5 启动时判断哪个端口没有被占用 6 try...catch */ 来源: https://www.cnblogs.com/huafan/p/12032914.html

赋值兼容规则(C++)

戏子无情 提交于 2019-12-11 10:26:16
在一定条件下,不同类型的数据之间可以进行类型转换,如可以将整型数据赋给双精度型变量。在赋值之前,先把整型数据转换成双精度型数据,然后再把它赋给双精度型变量。这种不同类型数据之间的自动转换和赋值,称为赋值兼容。在基类和派生类对象之间也存有赋值兼容关系,基类和派生类对象之间的赋值兼容规则是指在需要基类对象的任何地方,都可以使用其子类对象来代替。 下面主要讲积基类和派生类对象之间的赋值兼容 1· 派生类的对象可以赋值给基类对象。 A a1; //定义基类A对象a1 B b1; //定义类A的公用派生类B的对象b1 a1=b1; //用派生类B对象b1对基类对象a1赋值 在赋值时舍弃派生类自己的成员,只进行数据成员的赋值。 实际上,所谓赋值只是对数据成员赋值,对成员函数不存在赋值问题,内存中数据成员和成员函数是分开的。 注意: 赋值后不能企图通过对象a1去访问派生类对象b1的成员,因为b1的成员与a1的成员是不同的。 假设age是派生类B中增加的公用数据成员,分析下面的用法: a1.age=23;//错误,a1中不包含派生类中增加的成员 b1.age=21; //正确,b1中包含派生类中增加的成员 只能用子类对象对其基类对象赋值,而不能用基类对象对其子类对象赋值,理由是显然的,两种对象的大小是不同的,因为基类对象不包含派生类的成员无法对派生类的成员赋值。同理

C# 面试基础(三大特性)

拟墨画扇 提交于 2019-12-11 07:44:27
封装 封装有时称为面向对象的编程的第一支柱或原则。 根据封装原则,类或结构可以指定自己的每个成员对外部代码的可访问性。 可以隐藏不得在类或程序集外部使用的方法和变量,以限制编码错误或恶意攻击发生的可能性。 成员 所有方法、字段、常量、属性和事件都必须在类型中进行声明;这些被称为类型的成员。 C# 没有全局变量或方法,这一点其他某些语言不同。 即使是程序的入口点 Main 方法,也必须在类或结构中进行声明。 下面列出了所有可以在类或结构中声明的各种成员。 字段 常量 属性 方法 构造函数 事件 终结器 索引器 运算符 嵌套类型 可访问性 一些方法和属性可供类或结构外部的代码(称为“客户端代码”)调用或访问。 另一些方法和属性只能在类或结构本身中使用。 使用访问修饰符 public、protected、internal、protected internal、private 和 private protected 可指定类型及其成员对客户端代码的可访问性。 可访问性的默认值为 private。 访问修饰符是关键字,用于指定成员或类型已声明的可访问性。 可使用访问修饰符指定以下六个可访问性级别: public:访问不受限制。 protected:访问限于包含类或派生自包含类的类型。 internal:访问限于当前程序集。 protected internal