继承(指类之间共享属性和操作的机制)

继承(指类之间共享属性和操作的机制)

虚基类继承时要添加关键字virtual,以避免二义性。

{

自己理解:

公有:基类的公有和保护成员作为派生类的公有和保护成员,在派生类类体内可以对基类进行公有和保护操作,基类私有不可访问。在main()函数内,派生类对象可以访问基类成员。虽然基类的私有成员不被派生类访问,但派生类还是包含了基类的私有数据成员。

保护:基类的公有和保护成员作为派生类的保护成员,在派生类类体内可以对基类进行保护操作,基类私有不可访问。在main()函数内,派生类对象不可访问基类任何成员,可以通过访问派生类成员函数间接访问基类。

私有:基类公有和保护作为派生类的私有成员,在派生类类体内可以对基类进行保护操作,基类私有不可访问。在main()函数内,派生类对象不可访问基类任何成员,可以通过访问派生类成员函数间接访问基类。

成员的访问规则

访问修饰符     从自身类访问    从派生类访问    外部对象访问

Public         是              是               是

Protected      是              是               否

Private        是              否               否

详细解释:

默认的是私有继承

在公有继承中,基类的公有成员和保护成员在派生类中保持原有的访问属性,其私有成员仍为基类私有。

无论什么继承,基类的私有成员无法直接被派生类访问;可以通过友元函数访问私有

基类对象在某种情况下可以赋值给派生类对象。

在私有继承的情况下,派生类中新定义的成员函数可以访问基类的保护成员

    1. 公有继承(public)
  公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的。
  2. 私有继承(private)
  私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。
  3. 保护继承(protected)
  保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。


继承方式


基类特性


派生类特性


公有继承


public


public


protected
private


protected
不可访问


私有继承


public


private


protected
private


private
不可访问


保护继承


public


protected


protected
private


protected
不可访问

对于公有继承方式:

 
  (1) 基类成员对其对象的可见性:

  公有成员可见,其他不可见。这里保护成员同于私有成员。

  (2) 基类成员对派生类的可见性:

  公有成员和保护成员可见,而私有成员不可见。这里保护成员同于公有成员。

  (3) 基类成员对派生类对象的可见性:

  公有成员可见,其他成员不可见。

  所以,在公有继承时,派生类的对象可以访问基类中的公有成员;派生类的成员函数可以访问基类中的公有成员和保护成员。这里,一定要区分清楚派生类的对象和派生类中的成员函数对基类的访问是不同的。

  对于私有继承方式:

  (1) 基类成员对其对象的可见性:

  公有成员可见,其他成员不可见。

  (2) 基类成员对派生类的可见性:

  公有成员和保护成员是可见的,而私有成员是不可见的。

  (3) 基类成员对派生类对象的可见性:

  所有成员都是不可见的。

  所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。

  对于保护继承方式:

  这种继承方式与私有继承方式的情况相同。两者的区别仅在于对派生类的成员而言,对基类成员有不同的可见性。

  上述所说的可见性也就是可访问性。关于可访问性还有另的一种说法。这种规则中,称派生类的对象对基类访问为水平访问,称派生类的派生类对基类的访问为垂直访问。

  一般规则如下

   公有继承时,水平访问和垂直访问对基类中的公有成员不受限制;

   私有继承时,水平访问和垂直访问对基类中的公有成员也不能访问;

   保护继承时,对于垂直访问同于公有继承,对于水平访问同于私有继承。

  对于基类中的私有成员,只能被基类中的成员函数和友元函数所访问,不能被其他的函数访问。

时间: 2024-10-12 07:29:51

继承(指类之间共享属性和操作的机制)的相关文章

类内与类之间相关属性耦合采取刷新的讨论

标题有点看不懂,说简单点,第一种情况就是类A与类B两个类.其中类B需要类A的一个数据,并且到A中的数据进行更改时,类B需要被通知,进行刷新修改本地保存的类A中的相关属性.懂设计模式的朋友一看就知道可以用Observe观察者模式,将类B当成观察者,类A当成被观察者.即 A a; B b; a.addObserve(&b); a.update(); 当每次A的数据发生改变时,维护A的人需要手动去刷一把update来让A的所有观察者进行刷新,更新数据,这是一种方法.当然了,像我平时Qt开发,自然而然的

PHP如何定义类及其成员属性与操作

1.类的定义: 类的关键字定义使用class 1.定义一个空类 Class Person{}; 2.定义一个有成员属性和操作的类 Class Person{ //成员属性 $name     =  ''; //操    作 protected function getActionName() { return $this->name; } } 3.定义一个不能被继承的类,使用final关键字 Final class Person{ 成员属性........ 操    作........ } 4.

简单理解javascript中的原型对象,实现对之间共享属性和行为

javascript中提供了构造函数,能够方便的创建对象.典型的构造函数如下: function Person(name, age) { this.name = name; this.age = age; this.say = function () { return this.name + ',' + this.age;; } 之后就可以用new和构造函数创建多个对象.javascript中,类的不同对象之间,属性和方法都是独立的.什么意思呢?java中类的不同对象之间,成员变量是独立的(每个

实现Runnable接口和继承Thread类之间的区别

在Java语言中,我们都知道,有两种创建线程的方式,一中是使用Runnable接口,另一种是使用Thread类. public class DemoRunnable implements Runnable { public void run() { //Code } } //with a "new Thread(demoRunnable).start()" call public class DemoThread extends Thread { public DemoThread()

PHP 如何定义类、成员属性及其操作与魔术方法

PHP 类的定义与属性 一.类的定义类的关键字定义使用 class :例:class test{ } 二.类的属性与方法 class test{ $name = 'LH' ; //成员属性........ //成员方法........public function t1(){ } }三.定义一个不能继承的类 final class test{ }//final关键字只能修饰类和方法.不能用来修饰成员属性! 四.类.成员属性及方法的声明 1.public //公用的 表示全局的,类内部外部子类都可

类与对象属性的操作

类属性与对象属性的增删改查 类属性的增删改查 class School: """ 文档 """ Teacher = "老王" def __init__(self,name): self.name = name def Examination(self): print("%s的班级正在考试"%self) p1 = School("小李") '''类数据属性的增删改查 查 print(Sch

关于类之间的关系2----依赖

依赖是指类之间的调用关系,比如类A需要访问类B的属性和方法,或者类A负责实例化类B,那么我们就可以说A依赖B.UML图中用带虚线的实线箭头连接.和关联关系不同,无需在类A中定义类B类型的属性.也就是说,类A访问了类B的属性或者方法,假如类B不存在,那么类A也就会出错.开始接受依赖概念的时候,我经常跟继承混淆,看了百度上面的部分代码后,也明白两个不同概念的不同点了: 继承:public class apublic int a = 1;public void hello(){}public clas

面向对象【day07】:类的属性-继承-经典类

本节内容 类的公有属性 析构函数 类的继承 新式类和经典类 一.类的公有属性 一.概述 前面我们讲了类的私有属性,现在我们来说说类的公有属性,这边很容易被人弄混淆,有人觉的,在__init__()构造方法中,除了私有属性,其他的都是公有属性了,其实这是一个错误的结论,并不是定义在__init__()初始化方法中的属性是公有属性(除私有属性),那什么是公有属性呢?揭起了大家的好奇心. 定义:指的是所属这个类的所有对象,都可以访问的属性,叫做公有属性. 二.公有属性 2.1 定义 说明:在类中直接定

JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法

相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对象之间的赋值,for...in语句,delete使用,成员方法,json对象的使用,prototype的使用,原型继承与原型链 JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法 1.Object类 在JS中,Object是所有类的基