4.6 继承

2023-12-21 22:48:45

4.6 继承

C++中的继承是一种面向对象编程的重要特性,允许一个类(派生类/子类)使用另一个类(基类/父类)的成员和行为。继承提供了代码重用、层次结构和多态性的机制。

继承的语法,简单的描述如下

class A : public B;

A 类称为子类 或 派生类

B 类称为父类 或 基类

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

一类是从基类继承过来的,一类是自己增加的成员。
从基类继承过过来的表现其共性,而新增的成员体现了其个性。

4.6.2 继承方式

继承方式一共有三种:
公共继承
保护继承
私有继承

1.公有继承(Public Inheritance):

  • 使用 public 关键字,基类的公有成员和保护成员在派生类中仍然是公有和保护的,基类的私有成员在派生类中不可访问。

  • 示例:

    class A {
    public:
        int m_a;
    protected:
        int m_b;
    private:
        int m_c;
    };
    
    class B : public A {
        //在B类中A类中的成员属性不变。在B类中可以访问A类的public和protected成员,
        // 但不能访问A类中的private成员
    public:
        void fun(){
            
    		m_a; //可访问 public权限
    		m_b; //可访问 protected权限
    		//m_c; //不可访问     
        }
    
    };
    
    

    2.私有继承(Private Inheritance):

    使用 private 关键字,派生类的所有成员在派生类中都变为私有的,基类的私有成员在派生类中不可访问。示例:

    class A {
    public:
        int m_a;
    protected:
        int m_b;
    private:
        int m_c;
    };
    
    class B : private A {
        // 在B类中,A类中的所有成员都变为private。在B类中可以访问A类的public和protected成员,
        // 但不能访问A类中的private成员
    public:
    void func()
    {
    	m_a; //可访问 private权限
    	m_b; //可访问 private权限
    	//m_c; //不可访问
    }   
      
    };
    
    

保护继承(Protected Inheritance):

  • 使用 protected 关键字,派生类的公有和保护成员在派生类中仍然是保护的,基类的私有成员在派生类中不可访问。

    示例代码:

    class A {
    public:
        int m_a;
    protected:
        int m_b;
    private:
        int m_c;
    };
    
    class B : protected A {
        // 在B类中,A类中的所有成员都变为protected。在B类中可以访问A类的public和protected成员,
        // 但不能访问A类中的private成员
    public:
        void fun(){
            
    		m_a; //可访问 protected权限
    		m_b; //可访问 protected权限
    		//m_c; //不可访问     
        }  
    };
    
    void fun1(){
    	//对于B类从A类中使用protected继承,A类中的成员属性都变为protected属性
        A a;
        a.m_a;//不能访问,因为属性为protected
    }
    
    

下面图示就解释了上面的代码案例。

image-20231221211200330

未完待续。。。。


文章来源:https://blog.csdn.net/colortztzztzt/article/details/135141209
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。