子类继承基类的三种继承方式

在C++中,子类继承父类有三种继承方式,分别是:public, protected和private。子类继承的方式不同,那么子类对象访问父类中的参数访问权限也不同。

public 方式继承:基类的private成员派生类不可见,基类中的protected和public成员在派生类中可以直接使用,并且变成了派生类中相应                        的protected成员和public成员,但是只有public成员可以在派生类外使用。

protected 方式继承:基类的private成员派生类不可见,基类的protected成员和public成员变成派生类的protected成员,这时在派生类                             外不能使用基类的所有成员,包括public成员。 

private 方式继承:基类的private成员仍然为私有的,派生类不可见,基类中的protected成员和public成员成为了派生类中的private成                            员,在派生类外不能使用基类中的任何成员。

下面我们通过例子来解释上面的说法:

class A
{
  public:
    int m_public;
  protected:
    int m_protected;
  private:
    int m_private;
};

class B :public A
{
   void SetPublic(int nPublic)
   {
       m_public = nPublic;     //在派生类B中可以使用基类A中的public类型
   }
   void SetProtected(int nProtected)
   {
       m_protected = nProtected;     //在派生类B中可以使用基类A中的protected类型
   }
   void SetPrivate(int nPrivate)
   {
       m_private = nPrivate;       //错误,因为基类的private成员不能用
   }
};

B b;                  //创建B类的对象c
b.m_public = 100;     //正确
b.m_protected = 100;  //错误,public继承中基类的protected在派生类中是protected
b.m_private = 100;    //错误,在派生类中都不可以直接使用,在类外就更不能了

class C :protected A
{
   void SetPublic(int nPublic)
   {
       m_public = nPublic;       //在派生类C中可以使用基类A中的public类型
   }
   void SetProtected(int nProtected)
   {
       m_protected = nProtected;  //在派生类C中可以使用基类A中的protected类型
   }
   void SetPrivate(int nPrivate)
   {
       m_private = nPrivate;       //错误,因为基类的private成员不能用
   }
};

C c;                  //创建C类的对象c
c.m_public = 100;     //错误,protected继承C类里变成了protected成员
c.m_protected = 100;  //错误,protected继承C类里还是protected成员
c.m_private = 100;    //错误,在派生类中都不可以直接使用,在类外就更不能了

class D :private A
{
   void SetPublic(int nPublic)
   {
       m_public = nPublic;     //在派生类D中可以使用基类A中的public类型
   }
   void SetProtected(int nProtected)
   {
       m_protected = nProtected;  //在派生类D中可以使用基类A中的protected类型
   }
   void SetPrivate(int nPrivate)
   {
       m_private = nPrivate;       //错误,因为基类的private成员不能用
   }
};

D d;                  //创建D类的对象d
d.m_public = 100;     //错误,private继承D类里变成了private成员
d.m_protected = 100;  //错误,private继承D类里变成了private成员
d.m_private = 100;    //错误,在派生类中都不可以直接使用,在类外就更不能了

  

时间: 2024-10-22 13:11:08

子类继承基类的三种继承方式的相关文章

hibernate笔记--继承映射关系的三种实现方式

单表继承映射(一张表): 假设我们现在有三个类,关系如下: Person类有两个子类Student和Teacher,并且子类都具有自己独有的属性.这种实体关系在hibernate中可以使用单表的继承映射来建表,最后生成的表是这样的: 可以看到我们只需要建立一张表就可以维护这个关系,这种方式就是单表继承映射,下面介绍配置方法: 新建实体类Person ,Student,和Teacher : public class Person { private int id; private String n

C# 子类父类方法同名,三种处理方式?

1.重载:参数数量或者参数类型不同:2.重写:override 关键字重写父类方法,父类的方法是virtual 或 abstract修饰的, 1 using System; 2 class A 3 { 4 //虚方法 5 virtual public void sayHello(){ 6 Console.WriteLine("A sayHello"); 7 } 8 } 9 class Test:A 10 { 11 override public void sayHello(){ 12

C++的三种访问权限与三种继承方式

三种访问权限 我们知道C++中的类,有三种访问权限(也称作访问控制),它们分别是public.protected.private.要理解它们其实也很容易,看下面了一个例子. 父类: class Person { public: Person(const string& name, int age) : m_name(name), m_age(age) { } void ShowInfo() { cout << "姓名:" << m_name <&l

C++中的类继承(1) 三种继承方式

继承是使代码可以复用的重要手段,也是面向对象程序设计的核心思想之一.简单的说,继承是指一个对象直接使用另一对象的属性和方法.继承呈现了 面向对象程序设 计的层次结构, 体现了 由简单到复杂的认知过程.C++中的继承关系就好比现实生活中的父子关系,继承一笔财产比白手起家要容易得多,原始类称为基类,继承类称为子类,它们是类似于父亲和儿子的关系,所以也分别叫父类和子类.继承的方式有三种分别为公有继承(public),保护继承(protect),私有继承(private).定义格式如下: 1. 公有继承

类的三种成员与继承

对于类而言,一共有三种成员类型,分别为private,protected,public.其中,如果数据成员的类型为private,可以默认不写.对于在类外使用的情况,private和protected是一致的,均不可以由外部直接访问,而public所包含的成员是可以由外部直接访问的.下面给出一个基本的例子. 12345678910111213141516171819202122 class Time { private: int hour; int minute; protected: int

三种继承方式和三种访问权限

 也就是说子类只能访问父类的保护和公有成员,而对象只能访问公有成员. 继承方式 1. 三种继承方式不影响子类对父类的访问权限,子类对父类只看父类的访问控制权.     2. 继承方式是为了控制子类(也称派生类)的调用方(也叫用户)对父类(也称基类)的访问权限. 3. public.protected.private三种继承方式,相当于把父类的public访问权限在子类中变成了对应的权限. 如protected继承,把父类中的public成员在本类中变成了protected的访问控制权限:priv

js oop中的三种继承方法

JS OOP 中的三种继承方法: 很多读者关于js opp的继承比较模糊,本文总结了oop中的三种继承方法,以助于读者进行区分. <继承使用一个子类继承另一个父类,子类可以自动拥有父类的属性和方法.(继承的两方,发生在两个类之间)> 一.通过object实现继承 1:定义父类 function Parent(){} 2:定义子类 funtion Son(){} 3:通过原型给Object对象添加一个扩展方法. Object.prototype.customExtend = function(p

js的三种继承方式及其优缺点

第一种,prototype的方式: //父类 function person(){ this.hair = 'black'; this.eye = 'black'; this.skin = 'yellow'; this.view = function(){ return this.hair + ',' + this.eye + ',' + this.skin; } } //子类 function man(){ this.feature = ['beard','strong']; } man.pr

C++三种继承方式

一.三种继承方式 继承方式不同,第一个不同是的是派生类继承基类后,各成员属性发生变化.第二个不同是派生类的对象能访问基类中哪些成员发生变化.表格中红色标注. 1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 private: 7 int i; 8 protected: 9 int j; 10 public: 11 int k; 12 }; 13 14 class B:public A 15 { 16 17 }; 18