【C++】继承和多态、共有私有和保护、重写

这篇具有很好参考价值的文章主要介绍了【C++】继承和多态、共有私有和保护、重写。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

继承与多态的概念

	面向对象三大原则:封装、继承、多态。
  • 继承是一种机制,通过它一个类可以从另一个类继承属性和方法。派生类(子类)继承基类(父类)的成员函数和数据成员,并且可以在其基础上扩展自己的成员函数和数据成员。C++支持多重继承,即一个派生类可以同时从多个基类中继承。

  • 多态是指同一种操作作用于不同的对象上面,可以有不同的解释,产生不同的执行结果。在C++中,实现多态需要借助虚函数。虚函数是在基类中声明的函数,派生类可以对其进行重写,从而实现不同的功能。当通过指向基类的指针或引用调用虚函数时,程序会根据实际指向的对象类型来调用相应的函数,这种行为称为动态绑定,即在运行时确定调用的函数。

继承与多态的区别与联系

继承是指子类从父类继承属性和方法的过程,子类可以重写(override)父类的方法,以实现自己的特定功能。继承可以简化代码,减少重复的代码量,并且可以通过继承实现代码的复用。

多态是指同一种方法在不同对象上产生不同的行为。在多态的实现中,通常采用父类指针指向子类对象的方式,这样就可以通过父类指针调用子类方法,实现不同的行为。多态可以提高代码的灵活性和可扩展性,使得程序更易于维护和扩展。

区别:

  • 继承是一种代码复用的方式,可以从父类继承属性和方法;多态则是一种代码执行的方式,同一个方法在不同对象上有不同的行为。

  • 继承是一种静态的关系,类在编译时就确定了其继承关系;多态则是一种动态的关系,运行时才能确定具体的行为。

  • 继承是一种自上而下的设计方式,父类是子类的模板;多态则是一种自下而上的设计方式,子类决定了父类的行为。

联系:

  • 继承和多态都是面向对象编程的重要概念,它们都是实现代码复用、提高代码灵活性和可扩展性的重要方式。

  • 多态需要继承作为前提,因为父类指针可以指向子类对象,才能实现多态的效果。

示例

#include <iostream>
using namespace std;

// 基类
class Shape {
   protected:
      int width, height;

   public:
      Shape( int a = 0, int b = 0) {
         width = a;
         height = b;
      }
      virtual int area() {
         cout << "Parent class area :" <<endl;
         return 0;
      }
};

// 派生类
class Rectangle: public Shape {
   public:
      Rectangle( int a = 0, int b = 0):Shape(a, b) { }

      int area () { 
         cout << "Rectangle class area :" <<endl;
         return (width * height); 
      }
};

// 派生类
class Triangle: public Shape{
   public:
      Triangle( int a = 0, int b = 0):Shape(a, b) { }

      int area () { 
         cout << "Triangle class area :" <<endl;
         return (width * height / 2); 
      }
};

int main( ) {
   Shape *shape;
   Rectangle rec(10,7);
   Triangle  tri(10,5);

   // 存储矩形的地址
   shape = &rec;
   // 调用矩形的求面积函数 area
   shape->area();

   // 存储三角形的地址
   shape = &tri;
   // 调用三角形的求面积函数 area
   shape->area();
   
   return 0;
}

结果:

【C++】继承和多态、共有私有和保护、重写

可以看到,程序中定义了一个基类 Shape 和两个派生类 Rectangle 和 Triangle,两个派生类公有继承基类的属性和方法,并且重写了基类的虚函数 area()。在 main() 函数中,首先创建了一个指向基类的指针 shape,然后将其分别指向 Rectangle 和 Triangle 对象。最后通过指针调用虚函数。shape指针两次调用area方法,但是由于该指针指向的是不同对象,他会根据对象的类型来输出不同的结果,这就是多态

继承和访问的权限

在 C++ 中,类继承分为三种类型:public、protected 和 private。它们分别表示基类成员在派生类中的访问权限:

  • public 继承:基类中的 public 成员在派生类中仍然是 public 的,基类中的 protected 成员在派生类中仍然是 protected 的,基类中的 private 成员仍然是私有的,private成员不能被派生类访问。

  • protected 继承:基类中的 public 成员在派生类中变成 protected 的,基类中的 protected 成员在派生类中仍然是 protected 的,并且只能被他的派生类成员函数和友元函数所访问,基类中的 private 成员不能被派生类访问。

  • private 继承:基类中的 public 和 protected 成员在派生类中变成 private 的,基类中的 private 成员不能被派生类访问。

说明

class Base {
public:
    int a;
protected:
    int b;
private:
    int c;
};

class Derived1 : public Base {
    // a是public的,b是protected的,c不能访问
};

class Derived2 : protected Base {
    // a是protected的,b是protected的,c不能访问
};

class Derived3 : private Base {
    // a是private的,b是private的,c不能访问
};

示例:

#include <iostream>

using namespace std;

class Parent {
public:
    void publicMethod() {
        cout << "This is a public method of Parent class." << endl;
    }

protected:
    void protectedMethod() {
        cout << "This is a protected method of Parent class." << endl;
    }

private:
    void privateMethod() {
        cout << "This is a private method of Parent class." << endl;
    }
};

class Child : public Parent {
public:
    void callParentMethods() {
        publicMethod();     // 公有方法可以在子类中直接访问
        protectedMethod();  // 保护方法可以在子类中直接访问
        // privateMethod();    // 私有方法不能在子类中直接访问
    }
};

int main() {
    Child childObj;
    childObj.publicMethod();     // 公有方法可以在子类对象中直接访问
    // childObj.protectedMethod();  // 保护方法不能在子类对象中直接访问
    // childObj.privateMethod();    // 私有方法不能在子类对象中直接访问

    childObj.callParentMethods(); // 子类中的方法可以调用父类的公有和保护方法

    return 0;
}

在这个示例程序中,Parent类有三个成员方法,分别为publicMethod()protectedMethod()privateMethod(),它们的访问权限分别为public、protected和private。Child类继承了Parent类,并在其中定义了一个方法callParentMethods(),用于调用Parent类的publicMethod()和protectedMethod()方法。在main函数中,我们创建了一个Child类的对象childObj,并演示了不同的访问方式和权限。

结果

【C++】继承和多态、共有私有和保护、重写

从这个示例程序中可以看出,public成员可以在任何地方被访问,包括在子类中和子类对象中;protected成员只能在子类和子类对象中被访问;private成员只能在类的内部被访问,包括子类中也不能访问。

**提示:**如果把继承方式改为私有继承或保护继承,那么main函数中的

childObj.publicMethod();

语句也会报错,因为保护或私有继承过来之后,公有方法的权限就变了,子类对象不能访问私有或保护的方法,那就更不能访问基类的公有方法了。

结论

【C++】继承和多态、共有私有和保护、重写文章来源地址https://www.toymoban.com/news/detail-438317.html

到了这里,关于【C++】继承和多态、共有私有和保护、重写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++】多态的概念和简单介绍、虚函数、虚函数重写、多态构成的条件、重载、重写、重定义

        C++中的多态是一种面向对象编程的特性, 它允许不同的对象对同一个消息做出不同的响应。 多态性能够提高代码的可复用性和灵活性,使得代码更加模块化和可扩展。    多态性是通过使用继承和虚函数实现的。 当一个类被声明为虚函数时,它可以被子类重写,并

    2024年02月13日
    浏览(46)
  • 【C++进阶】继承、多态的详解(多态篇)

    作者:爱写代码的刚子 时间:2023.8.16 前言:本篇博客主要介绍C++中多态有关的知识,是C++中的一大难点,刚子将带你深入C++多态的知识。(该博客涉及到的代码是在x86的环境下,如果是在x86_64环境下指针的大小可能需要变成8bytes) 多态的概念 多态的概念:通俗来说,就是多

    2024年02月12日
    浏览(42)
  • 【C++进阶】继承、多态的详解(继承篇)

    作者:爱写代码的刚子 时间:2023.7.28 前言:本篇博客主要介绍C++进阶部分内容——继承,C++中的继承和多态是比较复杂的,需要我们认真去深挖其中的细节。 继承的概念及定义 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序

    2024年02月13日
    浏览(39)
  • 【C++】继承和多态

    继承机制是面向对象程序设计使代码可以 复用 的最重要的手段,它允许程序员在保持原有类特性的基础上进行 扩展 ,增加功能,这样产生新的类,称 派生类/子类 。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复

    2024年02月06日
    浏览(42)
  • C++ 中的继承和多态

    继承允许我们 依据一个类来定义另一个类 ,这使得创建和维护一个应用程序变得更容易。这样做也达到了重用代码功能和提高执行效率的效果。 派生类的成员可以直接访问基类的保护成员(protected),但不能直接访问基类的私有成员(private) 。不过需要注意的是,派生类

    2024年02月06日
    浏览(41)
  • C++基础篇:07 继承与多态

            当遇到问题,先看一下现有的类是否能够解决一部分问题,如果有则继承,并在此基础上进行扩展来解决所有问题,以此缩短解决问题的时间(代码复用)         当遇到一个大而复杂的问题时,可以把复杂问题拆分成若干个小问题,为每个小问题的解决设计一

    2024年02月08日
    浏览(50)
  • c++面向对象之封装、继承、和多态

    把客观事物封装成类,而且可以把自己的数据和方法设置为只能让可信的类或者对象操作,对不可信的信息进行隐藏(利用public,private,protected,friend)实现 has-a :描述一个类由多个部件类构成,一个类的成员属性是另一个已经定义好的类。 use-a:一个类使用另一个类,通过类之间

    2024年02月02日
    浏览(53)
  • C++ 面向对象核心(继承、权限、多态、抽象类)

    继承(Inheritance)是面向对象编程中的一个重要概念,它允许一个类(称为派生类或子类)从另一个类(称为基类或父类)继承属性和方法。继承是实现类之间的关系,通过继承,子类可以重用父类的代码,并且可以在此基础上添加新的功能或修改已有的功能。 在C++中,继承

    2024年02月08日
    浏览(49)
  • C++ 第三弹继承和多态-类和对象

    目录 1.继承 1.1什么是继承? 1.2语法格式 1.3继承权限 1.4继承概念语法格式 1.5赋值兼容规则 1.6继承体系中的作用域 1.7在继承体系中的构造和析构 1.8静态成员继承 1.9友元的继承 1.10不同继承方式下子类的对象模型 1.11继承和组合 2.多态 2.1什么是多态 2.2多态的分类 2.3实现条件

    2024年02月10日
    浏览(33)
  • c++入门学习⑦——继承和多态(超级详细版)

    目录 前言 继承 继承是什么? 为什么会存在继承? 语法: 一些基本的定义: 三种继承方式: 对象模型 对于构造和析构的顺序 同名函数的处理方式 总结: 静态成员: 定义: 性质: 共享数据  编译阶段分配内存 类内声明类外初始化 静态成员函数 静态成员函数与普通成员

    2024年02月21日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包